Search in sources :

Example 1 with TagAttributeInfo

use of jakarta.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class Parser method getAttributeBodyType.

/**
 * Determine the body type of <jsp:attribute> from the enclosing node
 */
private String getAttributeBodyType(Node n, String name) {
    if (n instanceof Node.CustomTag) {
        TagInfo tagInfo = ((Node.CustomTag) n).getTagInfo();
        TagAttributeInfo[] tldAttrs = tagInfo.getAttributes();
        for (TagAttributeInfo tldAttr : tldAttrs) {
            if (name.equals(tldAttr.getName())) {
                if (tldAttr.isFragment()) {
                    return TagInfo.BODY_CONTENT_SCRIPTLESS;
                }
                if (tldAttr.canBeRequestTime()) {
                    return TagInfo.BODY_CONTENT_JSP;
                }
            }
        }
        if (tagInfo.hasDynamicAttributes()) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.IncludeAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ForwardAction) {
        if ("page".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.SetProperty) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.UseBean) {
        if ("beanName".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.PlugIn) {
        if ("width".equals(name) || "height".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.ParamAction) {
        if ("value".equals(name)) {
            return TagInfo.BODY_CONTENT_JSP;
        }
    } else if (n instanceof Node.JspElement) {
        return TagInfo.BODY_CONTENT_JSP;
    }
    return JAVAX_BODY_CONTENT_TEMPLATE_TEXT;
}
Also used : TagInfo(jakarta.servlet.jsp.tagext.TagInfo) TagAttributeInfo(jakarta.servlet.jsp.tagext.TagAttributeInfo)

Example 2 with TagAttributeInfo

use of jakarta.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class TestTldParser method testTld.

@Test
public void testTld() throws Exception {
    TaglibXml xml = parse("test/tld/test.tld");
    Assert.assertEquals("1.0", xml.getTlibVersion());
    Assert.assertEquals("2.1", xml.getJspVersion());
    Assert.assertEquals("test", xml.getShortName());
    Assert.assertEquals("http://tomcat.apache.org/TldTests", xml.getUri());
    Assert.assertEquals(1, xml.getFunctions().size());
    ValidatorXml validator = xml.getValidator();
    Assert.assertEquals("com.example.Validator", validator.getValidatorClass());
    Assert.assertEquals(1, validator.getInitParams().size());
    Assert.assertEquals("value", validator.getInitParams().get("name"));
    Assert.assertEquals(1, xml.getTags().size());
    TagXml tag = xml.getTags().get(0);
    Assert.assertEquals("org.apache.jasper.compiler.TestValidator$Echo", tag.getTagClass());
    Assert.assertEquals("empty", tag.getBodyContent());
    Assert.assertTrue(tag.hasDynamicAttributes());
    Assert.assertEquals(1, tag.getVariables().size());
    TagVariableInfo variableInfo = tag.getVariables().get(0);
    Assert.assertEquals("var", variableInfo.getNameGiven());
    Assert.assertEquals("java.lang.Object", variableInfo.getClassName());
    Assert.assertTrue(variableInfo.getDeclare());
    Assert.assertEquals(VariableInfo.AT_END, variableInfo.getScope());
    Assert.assertEquals(4, tag.getAttributes().size());
    TagAttributeInfo attributeInfo = tag.getAttributes().get(0);
    Assert.assertEquals("Echo Tag", tag.getInfo());
    Assert.assertEquals("Echo", tag.getDisplayName());
    Assert.assertEquals("small", tag.getSmallIcon());
    Assert.assertEquals("large", tag.getLargeIcon());
    Assert.assertEquals("echo", attributeInfo.getName());
    Assert.assertTrue(attributeInfo.isRequired());
    Assert.assertTrue(attributeInfo.canBeRequestTime());
    attributeInfo = tag.getAttributes().get(1);
    Assert.assertEquals("fragment", attributeInfo.getName());
    Assert.assertTrue(attributeInfo.isFragment());
    Assert.assertTrue(attributeInfo.canBeRequestTime());
    Assert.assertEquals("jakarta.servlet.jsp.tagext.JspFragment", attributeInfo.getTypeName());
    attributeInfo = tag.getAttributes().get(2);
    Assert.assertEquals("deferredValue", attributeInfo.getName());
    Assert.assertEquals("jakarta.el.ValueExpression", attributeInfo.getTypeName());
    Assert.assertEquals("java.util.Date", attributeInfo.getExpectedTypeName());
    attributeInfo = tag.getAttributes().get(3);
    Assert.assertEquals("deferredMethod", attributeInfo.getName());
    Assert.assertEquals("jakarta.el.MethodExpression", attributeInfo.getTypeName());
    Assert.assertEquals("java.util.Date getDate()", attributeInfo.getMethodSignature());
    Assert.assertEquals(1, xml.getTagFiles().size());
    TagFileXml tagFile = xml.getTagFiles().get(0);
    Assert.assertEquals("Echo", tag.getDisplayName());
    Assert.assertEquals("small", tag.getSmallIcon());
    Assert.assertEquals("large", tag.getLargeIcon());
    Assert.assertEquals("Echo2", tagFile.getName());
    Assert.assertEquals("/echo.tag", tagFile.getPath());
    Assert.assertEquals(1, xml.getFunctions().size());
    FunctionInfo fn = xml.getFunctions().get(0);
    Assert.assertEquals("trim", fn.getName());
    Assert.assertEquals("org.apache.el.TesterFunctions", fn.getFunctionClass());
    Assert.assertEquals("java.lang.String trim(java.lang.String)", fn.getFunctionSignature());
}
Also used : TagAttributeInfo(jakarta.servlet.jsp.tagext.TagAttributeInfo) TagVariableInfo(jakarta.servlet.jsp.tagext.TagVariableInfo) FunctionInfo(jakarta.servlet.jsp.tagext.FunctionInfo) Test(org.junit.Test)

Example 3 with TagAttributeInfo

use of jakarta.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class Generator method generateTagHandlerAttributes.

/**
 * Generates declarations for tag handler attributes, and defines the getter
 * and setter methods for each.
 */
private void generateTagHandlerAttributes(TagInfo tagInfo) {
    if (tagInfo.hasDynamicAttributes()) {
        out.printil("private java.util.HashMap _jspx_dynamic_attrs = new java.util.HashMap();");
    }
    // Declare attributes
    TagAttributeInfo[] attrInfos = tagInfo.getAttributes();
    for (TagAttributeInfo info : attrInfos) {
        out.printin("private ");
        if (info.isFragment()) {
            out.print("jakarta.servlet.jsp.tagext.JspFragment ");
        } else {
            out.print(JspUtil.toJavaSourceType(info.getTypeName()));
            out.print(" ");
        }
        out.print(JspUtil.makeJavaIdentifierForAttribute(info.getName()));
        out.println(";");
    }
    out.println();
    // Define attribute getter and setter methods
    for (TagAttributeInfo attrInfo : attrInfos) {
        String javaName = JspUtil.makeJavaIdentifierForAttribute(attrInfo.getName());
        // getter method
        out.printin("public ");
        if (attrInfo.isFragment()) {
            out.print("jakarta.servlet.jsp.tagext.JspFragment ");
        } else {
            out.print(JspUtil.toJavaSourceType(attrInfo.getTypeName()));
            out.print(" ");
        }
        out.print(toGetterMethod(attrInfo.getName()));
        out.println(" {");
        out.pushIndent();
        out.printin("return this.");
        out.print(javaName);
        out.println(";");
        out.popIndent();
        out.printil("}");
        out.println();
        // setter method
        out.printin("public void ");
        out.print(toSetterMethodName(attrInfo.getName()));
        if (attrInfo.isFragment()) {
            out.print("(jakarta.servlet.jsp.tagext.JspFragment ");
        } else {
            out.print("(");
            out.print(JspUtil.toJavaSourceType(attrInfo.getTypeName()));
            out.print(" ");
        }
        out.print(javaName);
        out.println(") {");
        out.pushIndent();
        out.printin("this.");
        out.print(javaName);
        out.print(" = ");
        out.print(javaName);
        out.println(";");
        // Tag files should also set jspContext attributes
        // Only called for tag files so always set the jspContext
        out.printin("jspContext.setAttribute(\"");
        out.print(attrInfo.getName());
        out.print("\", ");
        out.print(javaName);
        out.println(");");
        out.popIndent();
        out.printil("}");
        out.println();
    }
}
Also used : TagAttributeInfo(jakarta.servlet.jsp.tagext.TagAttributeInfo)

Example 4 with TagAttributeInfo

use of jakarta.servlet.jsp.tagext.TagAttributeInfo in project tomcat by apache.

the class TagLibraryInfoImpl method createTagInfo.

private TagInfo createTagInfo(TagXml tagXml) throws JasperException {
    String teiClassName = tagXml.getTeiClass();
    TagExtraInfo tei = null;
    if (teiClassName != null && !teiClassName.isEmpty()) {
        try {
            Class<?> teiClass = ctxt.getClassLoader().loadClass(teiClassName);
            tei = (TagExtraInfo) teiClass.getConstructor().newInstance();
        } catch (Exception e) {
            err.jspError(e, "jsp.error.teiclass.instantiation", teiClassName);
        }
    }
    List<TagAttributeInfo> attributeInfos = tagXml.getAttributes();
    List<TagVariableInfo> variableInfos = tagXml.getVariables();
    return new TagInfo(tagXml.getName(), tagXml.getTagClass(), tagXml.getBodyContent(), tagXml.getInfo(), this, tei, attributeInfos.toArray(new TagAttributeInfo[0]), tagXml.getDisplayName(), tagXml.getSmallIcon(), tagXml.getLargeIcon(), variableInfos.toArray(new TagVariableInfo[0]), tagXml.hasDynamicAttributes());
}
Also used : TagExtraInfo(jakarta.servlet.jsp.tagext.TagExtraInfo) TagAttributeInfo(jakarta.servlet.jsp.tagext.TagAttributeInfo) TagInfo(jakarta.servlet.jsp.tagext.TagInfo) TagVariableInfo(jakarta.servlet.jsp.tagext.TagVariableInfo) URISyntaxException(java.net.URISyntaxException) JasperException(org.apache.jasper.JasperException) IOException(java.io.IOException)

Aggregations

TagAttributeInfo (jakarta.servlet.jsp.tagext.TagAttributeInfo)4 TagInfo (jakarta.servlet.jsp.tagext.TagInfo)2 TagVariableInfo (jakarta.servlet.jsp.tagext.TagVariableInfo)2 FunctionInfo (jakarta.servlet.jsp.tagext.FunctionInfo)1 TagExtraInfo (jakarta.servlet.jsp.tagext.TagExtraInfo)1 IOException (java.io.IOException)1 URISyntaxException (java.net.URISyntaxException)1 JasperException (org.apache.jasper.JasperException)1 Test (org.junit.Test)1