什么是Strut 2的Struts 1逻辑等价物:空标签?

时间:2011-01-03 23:37:42

标签: struts2

Strut 2的Struts 1逻辑是什么:空标记?

<logic:empty name="foo">
   Foo is null or the empty string
</logic:empty>

感谢。

4 个答案:

答案 0 :(得分:8)

没有struts2标签可以做到这一点,OGNL比struts1标签有更多的可能性和更强的表现力,但是似乎没有办法像简洁地检查null和空字符串的字符串。 / p>

以下作品:

<s:if test="(myString == null || myString.equals(''))">
  myString is blank or null
</s:if>
<s:else>
  The value is <s:property value="myString"/>
</s:else>

测试依赖于短路,因此无法通过相等测试来改变null的测试。

如果经常需要对此进行测试,则可能存在设计问题。通过适当的验证,你不应该有视图所依赖的未初始化的对象,但我想总有例外。

答案 1 :(得分:3)

添加到Quaternion的答案:

  1. 您始终可以在操作中添加方法以检查特定条件,例如MyAction.isPropertyXEmpty()将其置于<if test=...>条件

  2. 回想一下,在Struts2中,属性比Struts更富有类型/表现力。如果其他类型更合适,请不要使用字符串。并且您可以将它们初始化为非空值(例如,空字符串)以避免出现空问题。

答案 2 :(得分:1)

要扩展Steven的评论,您可以使用

导入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

然后使用:

<c:if test="${empty myStruts2Var}">

<c:if test="${not empty myStruts2Var}">

答案 3 :(得分:0)

对于字符串,我会使用:

main.js

对于收藏品,我会使用:

<s:if test="myString in {null, ''}">

希望这对可读性有益。