2010-08-19 70 views
2

我試圖做一個空字符串檢查,但它不會工作。Struts2,字符串null檢查

<s:iterator value="matrix" var="row"> 
    <tr> 
     <s:iterator value="value" var="col"> 
      <td>  
       <s:if test="%{#col==null}">0</s:if> 
       <s:else><s:property value="col"/></s:else> 
      </td> 
     </s:iterator> 
    </tr> 
</s:iterator> 

基質是

Map<Integer, List<String>> 

的VAR 「欄」 被正確地從列表中指定一個字符串值。
列表可能看起來像這樣[ 「你好」,NULL,「世界]

電流輸出:你好世界
通緝輸出:你好世界

提前

/感謝

回答

4

嘗試它沒有#

<s:if test="%{col==null}">0</s:if> 

我認爲已經會嘗試先解決「col」,並使用col的值作爲p roperty的名字。因爲那是空的,所以它會比較「」作爲屬性名稱,它是值棧的頂部。我不確定這將如何評估。

我總是用這樣的:

<s:if test="%{licenseStatusString != null}"> 
... something that uses licenseStatusString 
</s:if> 
+0

0給出 輸出:0 0 0 – Farmor 2010-08-19 15:03:46

+0

在如果與 '頂部' 替換 '欄' 和看到 – 2010-08-19 15:43:12

+0

感謝您的不幸的是,這會給空單元格而不是空單元帶來同樣的問題。我認爲我不會再爲這個struts問題感到困擾,並在JAVA中進行更改,即遍歷數組並將null更改爲「0」。 – Farmor 2010-08-20 06:57:45

0

我已經解決了我的問題。

<s:if test="%{#col==''}">0 </s:if> 

字符串數組中的值不是null,而是空的String。

2

這取決於您是否使用Struts2.0.x或更高版本,id屬性已經replaced以來Struts2.1.x在s:iteratorvar屬性。

Asuming Struts的2.1.x的,最好的辦法是分配var屬性,並把它作爲一個變量(因爲你已經建議)

<s:iterator value="bar" var="foo"> 
    <s:if test="#foo==null || #foo==''">0</s:if> 
</s:iterator> 

您可能還需要使用top變量獲得棧頂值,但它可能與您的對象屬性發生衝突。不過它的工作原理

<s:iterator value="bar"> 
    <s:if test="top==null || top==''">0</s:if> 
</s:iterator> 

但是,如果你只需要打印字符串的結果,沒有條件,無論是null,只是做這樣簡單

<s:iterator value="bar"> 
    <s:property /> <!-- prints iterator current value or '' if its null --> 
</s:iterator> 

詩篇。沒有必要在s:iftest屬性或s:propertyvalue屬性內使用ognl標記%{}

更多的例子,檢查struts2 iterator doc

0

你可以做到這一點的一條線(單if語句):

<s:property value="%{col==null ? '0':col}"/></s:else> 

或添加更多的字符串

<s:property value="%{col==null ? '0': 'The column is' + col}"/></s:else> 
0

對於做內部迭代器Struts2的;在'Test Clause'裏面,使用'#'來引用上下文變量。

  <s:iterator value="pageVo.voList" var="vo"> 
        <s:if test="%{#vo.iconclass != null}"> 
         <i class="${vo.iconclass}"></i> 
        </s:if> 
        <s:if test="%{#vo.label != null}"> 
         ${vo.label} 
        </s:if> 
       </button> 
      </s:iterator>