JSP自定义标签属性的默认值

为自定义JSP标记定义属性时,是否可以指定默认值? attribute指令不具有默认值属性。 目前我正在做:

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

有没有更好的办法?

有一个更好的方法:

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

在java和tld中不需要自定义标签。 只是普通的JSP EL和条件运算符。


在我看来,它比旧的更简洁,

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

问候

所以我不能找出一种方法将其添加到attribute指令本身; 看来这个指令不支持这个function。 不过,我可以创build一个封装<c:if>...</c:if>逻辑的标签。 我不得不在Java中编写标签,因为没有办法(我知道)使用属性值作为variables名称。

首先我把标签文件写成一个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; } } 

然后我做了一个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> 

然后我做了一个使用这个标签的自定义标签:

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} 

之后,我做了一个页面来testing我刚刚创build的标签:

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/> 

那给了我:

helloThar可选猴子

你好,这是猴子

你好你17