2012-03-20 115 views
1

我在找写这样的JSP代码片段一个更清洁的方式:JSP标签属性

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

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

我发现<c:out>标签与它的默认值属性,但是:

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

将无法​​正常工作,原因值不会为空过(因为它是安全的使用concat)。

有没有什么办法可以写出更简洁,更简洁,更好的东西?

回答

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

你也可以做一个自定义标签库,所以你有这样的事情结束了:

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

由于Servlet规范财产以后,而你可以实现的taglib的JSP的片段或你可以使用Java一路走下去。

+0

Upvote for your effort,但是这不是更清洁的任何方式。 – 2012-03-20 10:45:40

+0

取决于,我个人不喜欢看 slipset 2012-03-20 10:56:36

1

另一种方法是这样的;

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

比你的第一个例子短一点,但仍然有点太混乱。但是请记住,你的标题仍然需要消毒,因为它的封装在一个html标签中。

StringEscapeUtils.escapeHtml(mode.title) 
+0

Upvote为您的努力,但是这不是更清洁的任何方式。感谢您提供转义的提示,但我在内部类实现中实际做到了这一点。 – 2012-03-20 10:45:31