tipos tag lib etiquetas java jsp jsp-tags default-value

java - tag - Valor predeterminado en el atributo de etiqueta personalizada JSP



tag lib java (2)

Así que no pude encontrar una manera de agregar esto a la directiva de attribute sí misma; parece que la directiva no admite esta funcionalidad. Sin embargo, pude crear una etiqueta que encapsula la lógica <c:if>...</c:if> . Tuve que escribir la etiqueta en Java, ya que no hay forma (que yo sepa) de usar un valor de atributo como nombre de variable.

Primero escribí el archivo de etiqueta como una clase de Java:

DefaultTag.java

public class DefaultTag extends BodyTagSupport { private String var; private Object value; //for tag attribute public void setVar(String var) { this.var = var; } //for tag attribute public void setValue(Object value) { this.value = value; } public int doEndTag() throws JspException { Object oldValue = pageContext.getAttribute(var); Object newValue; if(value != null) { newValue = value; } else { if(bodyContent == null || bodyContent.getString() == null) { newValue = ""; } else { newValue = bodyContent.getString().trim(); } } if(oldValue == null) { pageContext.setAttribute(var, newValue); } else if(oldValue.toString().trim().length() == 0) { pageContext.setAttribute(var, newValue); } return EVAL_PAGE; } }

Luego hice un archivo tld :

utils.tld :

<?xml version="1.0" encoding="ISO-8859-1"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>2.0</tlib-version> <short-name>utils</short-name> <uri>http://utils</uri> <tag> <name>default</name> <tag-class>com.mystuff.mvc.tag.DefaultTag</tag-class> <body-content>JSP</body-content> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>

Luego hice una etiqueta personalizada que usa esta etiqueta:

defaultTest.tag

<%@ taglib prefix="utils" uri="/WEB-INF/tlds/utils.tld" %> <%@ attribute name="value" required="true"%> <%@ attribute name="optValue" required="false"%> <utils:default var="optValue" value="optional monkeys"/> ${value} ${optValue}

Después de eso, hice una página para probar la etiqueta que acabo de crear:

tagTest.jsp

<mystuff:defaultTest value="helloThar" /><br/><br/> <mystuff:defaultTest value="helloThere" optValue="monkeys" /><br/><br/> <mystuff:defaultTest value="helloYou" optValue="${1 + 2 + 4 + 10}" /><br/><br/>

Y eso me dio:

helloThar monos opcionales

Hola, monos

hola tu 17

Al definir un atributo para una etiqueta JSP personalizada, ¿es posible especificar un valor predeterminado? La directiva de attribute no tiene un atributo de valor predeterminado. Actualmente me las estoy arreglando con:

<%@ attribute name="myAttr" required="false" type="java.lang.String" %> <c:if test="${empty myAttr}" > <c:set var="myAttr" value="defaultValue" /> </c:if>

¿Hay una mejor manera?


Hay una mejor manera:

<c:set var="title" value="${(empty title) ? ''Default title'' : title}" />

No hay necesidad de una etiqueta personalizada en java ni tld. Simplemente JSP EL y operador condicional.

En mi opinión, es más corto y más limpio que viejo:

<c:if test="${empty title}" > <c:set var="title" value="Default title" /> </c:if>

Saludos