in maven2-plugins/myfaces-faces-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/faces/GenerateJspTaglibsMojo.java [537:670]
protected void writeTagAttribute(
XMLStreamWriter stream,
String propertyName,
String description,
String[] unsupportedAgents,
PropertyBean property) throws XMLStreamException
{
stream.writeCharacters("\n ");
stream.writeStartElement("attribute");
// In JSP 2.1, the description goes at the beginning
if (_is12())
_writeTagAttributeDescription(stream, description, unsupportedAgents);
stream.writeCharacters("\n ");
stream.writeStartElement("name");
if (property != null)
stream.writeCharacters(property.getJspPropertyName());
else
stream.writeCharacters(propertyName);
stream.writeEndElement();
if (!_is12())
{
if (property != null)
{
if (property.isRequired())
{
stream.writeCharacters("\n ");
stream.writeStartElement("required");
stream.writeCharacters("true");
stream.writeEndElement();
}
}
stream.writeCharacters("\n ");
stream.writeStartElement("rtexprvalue");
stream.writeCharacters("false");
stream.writeEndElement();
// In JSP 2.0, the tag description goes at the end
_writeTagAttributeDescription(stream, description, unsupportedAgents);
}
else
{
if (property != null)
{
if (property.isRequired())
{
stream.writeCharacters("\n ");
stream.writeStartElement("required");
stream.writeCharacters("true");
stream.writeEndElement();
}
if (property.isMethodExpression() || property.isMethodBinding())
{
stream.writeCharacters("\n ");
stream.writeStartElement("deferred-method");
stream.writeCharacters("\n ");
MethodSignatureBean sig = property.getMethodBindingSignature();
if (sig != null)
{
stream.writeStartElement("method-signature");
stream.writeCharacters(sig.getReturnType());
stream.writeCharacters(" myMethod(");
String[] params = sig.getParameterTypes();
for (int i = 0; i < params.length; i++)
{
if (i > 0)
stream.writeCharacters(", ");
stream.writeCharacters(params[i]);
}
stream.writeCharacters(")");
stream.writeEndElement();
}
stream.writeEndElement();
}
else if (!property.isLiteralOnly() ||
// "binding" is always a deferred-value
"binding".equals(propertyName))
{
stream.writeCharacters("\n ");
stream.writeStartElement("deferred-value");
String propertyClass = property.getPropertyClass();
// Writing java.lang.String is usually a bad idea - it
// means that null gets coerced to the empty string.
if (("java.lang.String".equals(propertyClass) && coerceStrings) ||
_CAN_COERCE.contains(property.getPropertyClass()))
{
stream.writeCharacters("\n ");
stream.writeStartElement("type");
// Trim out any use of generics here - since JSP coercion
// certainly can't do anything there
int genericIndex = propertyClass.indexOf('<');
if (genericIndex > 0)
propertyClass = propertyClass.substring(0, genericIndex);
stream.writeCharacters(propertyClass);
stream.writeEndElement();
stream.writeCharacters("\n ");
}
stream.writeEndElement();
}
else if (property.isRtexprvalue())
{
stream.writeCharacters("\n ");
stream.writeStartElement("rtexprvalue");
stream.writeCharacters("true");
stream.writeEndElement();
}
else
{
stream.writeCharacters("\n ");
stream.writeStartElement("rtexprvalue");
// As of JSF 1.2, "id" can be set via an rtexprvalue (but
// *not* by a ValueExpression) - it has to be evaluated
// in the JSP
if ("id".equals(propertyName) && !disableIdExpressions)
stream.writeCharacters("true");
else
stream.writeCharacters("false");
stream.writeEndElement();
}
}
}
stream.writeCharacters("\n ");
stream.writeEndElement();
}