Basic problem
I’ve come across a bit of a problem while writing my own custom JSP tags to “wrap” the spring MVC form tags. I’ve wrapped other tags successfully but come unstuck with the select and options tags, this throws an IlleagalStateException. I’ve debugged the spring code and found that the options tag looks for an ancestor select tag. I’m doing this with tag files so the spring select tag is actually in a different tag file. I guess that’s why it doesn’t find it.
So the questions is what can I do to get round this?
Possible solutions
I’ve tried looking for solutions but all I’ve found is other people having the same problem but no solution posted. I did ponder writing my own select and options tags without using the spring tags but I don’t really want to have to replicate the binding that it gives you for free. I don’t mind changing to use Java classes rather than tag files but I found previously that the output won’t be evaluated as a JSP so you can’t output another JSP tag.
Reasons for doing this
Having thought about this for a week since first asking the question I am now clearer on what I want to achieve.
- To simplify the markup needed in my JSP’s
- Factoring out common code (e.g. form:errors after an input or getting a translation from spring:message)
- To encapsulate look and feel (CSS goes a long way but often you need to change the markup too)
- To be able to build enhanced components that extend the functionallity of the spring tags (e.g. render a multi-select as a picklist or display readonly inputs as text labels)
I’ll be interested to hear what people think.
Thanks
I’ve thought about this for a good week now and this is the shortlist:
Given the reasons for wanting to do this (which I have now clarified in the question), I’ve decided to go for the last option. I wasn’t keen on this originally because I thought I might end up with hundreds of parameters but it’s actually not too bad. The tag files are designed for wrapping common bits of markup so this is what they’re for. I’ve also wrapped my own tag further so there is a picklist tag which outputs my custom select tag and then writes the JS needed to initialise it.
I think this is the best of the possible solutions I’ve come across based on what I wanted to achieve. This is what I’m going with but I’d still be interested to hear of other peoples solutions if they think they have something better.