DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17052>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17052 jsp:element name attribute clobbered by nested jsp:attribute Summary: jsp:element name attribute clobbered by nested jsp:attribute Product: Tomcat 5 Version: 5.0.0 Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Jasper2 AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] If a <jsp:element> has a nested <jsp:attribute name="name">, the <jsp:attribute> body is erroneously used as the tag name of the generated element. The JSP 2.0 spec JSP.5.14 says: A jsp:element element has one mandatory attribute, name, of type String. The value of the attribute is used as that of the tag of the element generated. In other words, <jsp:element name="foo"> <jsp:attribute name="bar">yada</jsp:attribute> </jsp:element> generates this: <foo bar="yada"/> However, if the attribute's name happens to be "name", the tag name gets clobbered. Hence for this coding: <jsp:element name="input"> <jsp:attribute name="type">text</jsp:attribute> <jsp:attribute name="name">userName</jsp:attribute> </jsp:element> instead of this: <input type="text" name="userName" size="20"/> it generates this: <userName type="text" size="20"/> This makes it impossible with XML syntax to generate HTML forms, that use named input elements. --- Suggested Fix --- The affected classes are in the org.apache.jasper.compiler package: Generator.java Node.java In the Generator class, in the method public void visit(Node.JspElement n) the code currently has special handling for any attribute named "name", making it the tag name and excluding it from the rest of the attribute generation. This appears to be wrong to me, as it confuses <jsp:attribute name="name"> and <jsp:element name="foo">, and it makes it impossible to create <input type="text" name="foo"/>, as noted above. I think the fix would involve: 1. In Node.java: add a "name" property to the Node.JspElement class, corresponding to the "name" attribute of the <jsp:element> standard action. In the constructor, extract the required "name" attribute passed in the first parameter, and store it as the value of the name property. 2. In Generator.java: In the visit(Node.JspElement n) method, take out the special handling, just using the Node.JspElement "name" property as the tag name, and allowing *all* Node.JspAttribute elements to contribute to the tag attributes without skipping "name". --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]