2010-08-19 74 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>