2012-03-20 113 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