我正在尝试对String进行空检查,但它不起作用。
<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“col”从List中正确分配了一个String值 列表可能看起来像这样[“hello”,null,“world]
当前输出:你好世界
通缉输出:你好 0 世界
/提前致谢
答案 0 :(得分:4)
没有#。
尝试 <s:if test="%{col==null}">0</s:if>
我认为has会首先尝试解析'col',并使用col的值作为属性名称。由于它是空的,它会将“”作为属性名称进行比较,属性名称是值堆栈的顶部。我不确定这会如何评估。
我总是使用这样的东西:
<s:if test="%{licenseStatusString != null}">
... something that uses licenseStatusString
</s:if>
答案 1 :(得分:3)
这取决于您使用的是Struts2.0.x还是更高版本,因为id
的{{1}}属性var
属于s:iterator
自Struts2以来的var
属性。 1.x的。
Asuming Struts 2.1.x,最好的方法是分配<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
但是,如果您只需要打印String的结果,没有条件,无论是<s:iterator value="bar">
<s:property /> <!-- prints iterator current value or '' if its null -->
</s:iterator>
还是为空,只需要像这样简单地执行
%{}
聚苯乙烯。没有必要在test
的{{1}}属性或s:if
的{{1}}属性中使用ognl标记 value
有关更多示例,请查看replaced
答案 2 :(得分:0)
我已经解决了我的问题。
<s:if test="%{#col==''}">0 </s:if>
字符串数组中的值不是null,而是空字符串。
答案 3 :(得分:0)
您可以在一行(单个if语句)中执行此操作:
<s:property value="%{col==null ? '0':col}"/></s:else>
或添加更多字符串
<s:property value="%{col==null ? '0': 'The column is' + col}"/></s:else>
答案 4 :(得分: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>