我使用struts 2.3.16和tiles 2.0.6。Struts2 Tiles將var設置爲tiles屬性作爲字符串
與空的屬性(其中包括)一個瓷磚的定義:
<put-attribute name="pageSidePanel" value="" />
一些其他的定義擴展它,他們可以選擇無論是在填入值:
<put-attribute name="pageSidePanel" value="/panels/greenPanel.jsp" />
拉倒也是空的。
我試着用struts「set」標籤和一些基本的if/else邏輯來測試這個屬性是否爲空。例如:
<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>
<s:if test='%{#sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>
結果不是我所期望的。我進行了11次邏輯測試,兩種變化:11次測試中使用的井號標籤,以及其他11個都沒有:
#sidePanelName vs sidePanelName
我做了2個不同的JSP頁面,一個測試,實際上已經把一個價值在瓷磚和一個沒有。因此,在總共有44邏輯測試:使用#一個頁面,瓷磚屬性上
- 11個測試爲空
- 11個測試不使用#一個頁面,瓷磚屬性上是使用空
- 11個測試#一個頁面,瓷磚屬性上填充了值
- 11個測試不使用#一個頁面,瓦片上的屬性與價值
填寫ONLY情況3是正確的。所有其他情況都給出了錯誤的結果。例如,在情況1中,如果我測試#var == null
我會得到錯誤,但如果我測試var == null
(沒有標籤)i
變爲true。所以我需要清理兩件事:
- 使用#或不使用的效果是什麼?
- tiles屬性是否具有值的作用是什麼,struts var將它視爲null還是作爲空字符串,還是取決於我是否使用了#或不是?
僅供參考,這裏有所有的測試:
<s:set var="sidePanelName"><tiles:getAsString name='pageSidePanel'/></s:set>
<s:if test='#sidePanelName != ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="#sidePanelName != ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName == ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="#sidePanelName == ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{!#sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.length() > 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.length() == 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.equals("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{#sidePanelName.equalsIgnoreCase("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName == null'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='#sidePanelName != null'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName != ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="sidePanelName != ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName == ""'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test="sidePanelName == ''">TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{!sidePanelName.isEmpty()}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.length() > 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.length() == 0}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.equals("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='%{sidePanelName.equalsIgnoreCase("")}'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName == null'>TRUE</s:if><s:else>FALSE</s:else>
<s:if test='sidePanelName != null'>TRUE</s:if><s:else>FALSE</s:else>
您應該使用's:property'標籤輸出'tiles:getAsString'的值。 – 2014-08-28 17:08:42