1) You use latest 3.1.4 GA version?
2) exception thrown only with immediate true?
there are 2 kinds of tags:
-facelets custom tags which are only useable in a facelets environment and which are more or less code templates with dynamic attributes assigment (auto wiring).
If you have some form inputs repeated in many pages (a name+address form for example), then this approach is good for you. This is not easy to manipulate at first, then you will work easily with facelets tags.
- JSF custom tags. Basically you can wire anything from your model to your page and vice-versa, like any other JSF tag via 3 classes : the tag class holding your string tag attributes, the component class holding the actual values after evaluation, and the renderer class writing the html on the response. you also need one .tld to define the taglib, and possibly the facelets definition .taglib.xml if you want to use your tag in a facelets environment as well.
Making them is more work than facelets tag but they are useable in any JSf environment (facelets or not). Maybe you will struggle as long as you don't understand the JSF lifecycle very well, but after a while you'll find it not so hard.
Recently I made a rich editor JSF tag based on FCK editor using this approach (yes I know there is already one on Sourceforge but I wasn't happy with it).
Also if you want to make Ajax components, RichFaces has some SDK making it much easier, but I am no expert in it.
sorry wrong topic...
1) Yes, latest 3.1.4 GA version.
2) The submit-problem was "solved" previously in RF-997. So yes, the problem occurs only with immediate=true.
For 3.1.5 I think another dirty hack is acceptable, but for 3.2.x rewrite the calendar component (its conversion strategy).