JSP标记,用于缩短iffing null属性

时间:2012-03-20 10:03:32

标签: jsp if-statement jsp-tags

我正在寻找一种更清晰的方式来编写这样的jsp片段:

<a href="${model.link}" class="button"<c:if test="${not empty model.title"> title="${model.title}"</c:if>>

此代码很难阅读。问题是,不应该生成空的title=""标记属性,所以这部分必须是iffed。

我发现<c:out>标记带有默认值属性,但是:

<c:out value='title="${model.title}"' default=""/>

将无法正常工作,因为值永远不会为null(因为它是安全的String concat)。

有没有办法把这些简单的东西写得更短,更干净,更好?

2 个答案:

答案 0 :(得分:1)

<c:if test = "${not empty model.title}">
<c:set var = "title" value = "title = '${model.title}'"/>
</c:if>
<a href="${model.link}" class="button" ${title}>

你也可以做一个自定义的taglib,所以你最终得到这样的东西:

<my:link class = "button" model = "${model}">...</my:link>

由于servlet spec somthing-而你可以将taglib实现为jsp-snippet,或者你可以使用Java。

答案 1 :(得分:1)

另一种方法就是这样;

<a href="${model.link}" class="button"<% if (model.title != null) { %> title="${model.title}"<% } %>>

比你的第一个例子略短,但仍然有点过于混乱。

然而,请记住,您的标题仍然需要清理,因为它封装在一个html标记中。

StringEscapeUtils.escapeHtml(mode.title)