luehe       2002/07/29 12:33:07

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  Consider the tag directive attribute 'dynamic-attributes' in code generation for tag 
files
  
  Revision  Changes    Path
  1.47      +43 -9     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- Generator.java    26 Jul 2002 17:42:16 -0000      1.46
  +++ Generator.java    29 Jul 2002 19:33:07 -0000      1.47
  @@ -2702,13 +2702,19 @@
        // Generate class declaration
        out.printin("public class ");
        out.print(tagInfo.getTagName());
  -     out.print(" extends javax.servlet.jsp.tagext.SimpleTagSupport {");
  +     out.print(" extends javax.servlet.jsp.tagext.SimpleTagSupport");
  +     if (tagInfo.hasDynamicAttributes())
  +         out.print(" implements javax.servlet.jsp.tagext.DynamicAttributes");
  +     out.print(" {");
        out.pushIndent();
        
        // Class body begins here
   
        generateTagHandlerDeclarations(tagInfo);
   
  +     if (tagInfo.hasDynamicAttributes())
  +         generateSetDynamicAttribute();
  +
        out.printil("public int doTag() throws JspException {");
        out.pushIndent();
        // Declare parameter map for fragment/body invocation
  @@ -2747,11 +2753,13 @@
       private void generateTagHandlerDeclarations(TagInfo tagInfo)
                throws JasperException {
   
  -     TagAttributeInfo[] attrInfos;
  -     TagFragmentAttributeInfo[] fragAttrInfos;
  +     if (tagInfo.hasDynamicAttributes()) {
  +         out.printil("HashMap dynamicAttrs = new java.util.HashMap();");
  +     }
   
  -     attrInfos = tagInfo.getAttributes();
  -     fragAttrInfos = tagInfo.getFragmentAttributes();
  +     TagAttributeInfo[] attrInfos = tagInfo.getAttributes();
  +     TagFragmentAttributeInfo[] fragAttrInfos
  +         = tagInfo.getFragmentAttributes();
   
        // Declare "normal" attributes
        if (attrInfos != null) {
  @@ -2841,7 +2849,23 @@
       }
   
       /*
  -     * Creates a page-scoped variable for each tag attribute declared.
  +     * Generates implementation of
  +     * javax.servlet.jsp.tagext.DynamicAttributes.setDynamicAttribute() method,
  +     * which saves each dynamic attribute that is passed in so that a scoped
  +     * variable can later be created for it.
  +     */
  +    public void generateSetDynamicAttribute() {
  +        out.printil("public void setDynamicAttribute(String uri, String localName, 
Object value) throws AttributeNotSupportedException {");
  +     out.pushIndent();
  +     out.printil("dynamicAttrs.put(localName, value);");
  +     out.popIndent();
  +     out.printil("}");
  +    }
  +
  +    /*
  +     * Creates a page-scoped variable for each declared tag attribute.
  +     * Also, if the tag accepts dynamic attributes, a page-scoped variable
  +     * is made available for each dynamic attribute that was passed in.
        */
       private void generatePageScopedVariables(TagInfo tagInfo) {
   
  @@ -2870,6 +2894,16 @@
                out.print(toUpperCaseFirstChar(attrName));
                out.println("());");
            }
  +     }
  +
  +     // dynamic attributes
  +     if (tagInfo.hasDynamicAttributes()) {
  +         out.printil("for (Iterator i = dynamicAttrs.entrySet().iterator(); 
i.hasNext(); ) {");
  +         out.pushIndent();
  +         out.printil("Map.Entry e = (Map.Entry) i.next();");
  +         out.printil("this.jspContext.setAttribute(e.getKey(), e.getValue());");
  +         out.popIndent();
  +         out.printil("}");
        }
       }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to