public JasperTagInfo(String tagName, String tagClassName, String bodyContent, String infoString, TagLibraryInfo taglib, TagExtraInfo tagExtraInfo, TagAttributeInfo[] attributeInfo, String displayName, String smallIcon, String largeIcon, TagVariableInfo[] tvi, String mapName) { super(tagName, tagClassName, bodyContent, infoString, taglib, tagExtraInfo, attributeInfo, displayName, smallIcon, largeIcon, tvi); this.dynamicAttrsMapName = mapName; }
protected void settingExtraInfo( JspProcessor processor, Hashtable seed) { TagExtraInfo tei = (TagExtraInfo) ObjectUtil.newInstance(getExtraInfoClass()); boolean hasNestedVariable = existsNestedVariable(tei, seed); boolean hasDynamicName = existsDynamicName(seed); TLDScriptingVariableInfo variableInfo = new TLDScriptingVariableInfo(); variableInfo.setTagExtraInfo(tei); variableInfo.setNestedVariable(hasNestedVariable); variableInfo.setDynamicName(hasDynamicName); if (hasNestedVariable) { ScriptableTagData tagData = new ScriptableTagData(seed); if (hasDynamicName) { variableInfo.setTagData(tagData); } else { variableInfo.setVariableInfos(tei.getVariableInfo(tagData)); } } processor.setTLDScriptingVariableInfo(variableInfo); }
protected void end(String body) { try { Class clazz = ObjectUtil.loadClass(body, TagExtraInfo.class); setTeiClass(clazz); } catch (RuntimeException e) { if (LOG.isErrorEnabled()) { LOG.error(e.getMessage()); } _handler.invalidate(); } }
public void setExtraInfoClass(Class teiClass) { if (teiClass == null || TagExtraInfo.class.isAssignableFrom(teiClass) == false) { throw new IllegalArgumentException(); } _teiClass = teiClass; }
protected boolean existsNestedVariable( TagExtraInfo tei, Hashtable seed) { VariableInfo[] dummy = tei.getVariableInfo(new DummyTagData(seed)); if (dummy != null) { for (int i = 0; i < dummy.length; i++) { if (dummy[i].getScope() == VariableInfo.NESTED) { return true; } } } return false; }
@Override public void visit(Node.CustomTag n) throws JasperException { TagInfo tagInfo = n.getTagInfo(); if (tagInfo == null) { err.jspError(n, "jsp.error.missing.tagInfo", n.getQName()); } /* * The bodycontent of a SimpleTag cannot be JSP. */ if (n.implementsSimpleTag() && tagInfo.getBodyContent().equalsIgnoreCase(TagInfo.BODY_CONTENT_JSP)) { err.jspError(n, "jsp.error.simpletag.badbodycontent", tagInfo.getTagClassName()); } /* * If the tag handler declares in the TLD that it supports dynamic * attributes, it also must implement the DynamicAttributes * interface. */ if (tagInfo.hasDynamicAttributes() && !n.implementsDynamicAttributes()) { err.jspError(n, "jsp.error.dynamic.attributes.not.implemented", n.getQName()); } /* * Make sure all required attributes are present, either as * attributes or named attributes (<jsp:attribute>). Also make sure * that the same attribute is not specified in both attributes or * named attributes. */ TagAttributeInfo[] tldAttrs = tagInfo.getAttributes(); String customActionUri = n.getURI(); Attributes attrs = n.getAttributes(); int attrsSize = (attrs == null) ? 0 : attrs.getLength(); for (int i = 0; i < tldAttrs.length; i++) { String attr = null; if (attrs != null) { attr = attrs.getValue(tldAttrs[i].getName()); if (attr == null) { attr = attrs.getValue(customActionUri, tldAttrs[i].getName()); } } Node.NamedAttribute na = n.getNamedAttributeNode(tldAttrs[i].getName()); if (tldAttrs[i].isRequired() && attr == null && na == null) { err.jspError(n, "jsp.error.missing_attribute", tldAttrs[i].getName(), n.getLocalName()); } if (attr != null && na != null) { err.jspError(n, "jsp.error.duplicate.name.jspattribute", tldAttrs[i].getName()); } } Node.Nodes naNodes = n.getNamedAttributeNodes(); int jspAttrsSize = naNodes.size() + attrsSize; Node.JspAttribute[] jspAttrs = null; if (jspAttrsSize > 0) { jspAttrs = new Node.JspAttribute[jspAttrsSize]; } Hashtable<String, Object> tagDataAttrs = new Hashtable<String, Object>(attrsSize); checkXmlAttributes(n, jspAttrs, tagDataAttrs); checkNamedAttributes(n, jspAttrs, attrsSize, tagDataAttrs); TagData tagData = new TagData(tagDataAttrs); // JSP.C1: It is a (translation time) error for an action that // has one or more variable subelements to have a TagExtraInfo // class that returns a non-null object. TagExtraInfo tei = tagInfo.getTagExtraInfo(); if (tei != null && tei.getVariableInfo(tagData) != null && tei.getVariableInfo(tagData).length > 0 && tagInfo.getTagVariableInfos().length > 0) { err.jspError("jsp.error.non_null_tei_and_var_subelems", n.getQName()); } n.setTagData(tagData); n.setJspAttributes(jspAttrs); visitBody(n); }
public void setTagExtraInfo(TagExtraInfo tei) { _tei = tei; }