我正在寻找一种更清晰的方式来编写这样的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)。
有没有办法把这些简单的东西写得更短,更干净,更好?
答案 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)