Struts 2中与Struts 1的logic:empty标签相对应的是什么?

4

Struts 2中与Struts 1的logic:empty标签相当的是什么?

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

谢谢。

这个问题还未解决吗? - Quaternion
4个回答

8

没有struts2标签可以做到这一点,使用OGNL比struts1标签具有更多的可能性和表现力,然而似乎没有一种简洁的方式来检查一个字符串是否为null和空字符串。

以下代码可以实现:

<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的测试。

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


3

补充Quaternion的回答:

  1. 您可以在操作中添加一个检查特定条件的方法,例如 MyAction.isPropertyXEmpty() 并将其放在 <if test=...> 条件中。

  2. 请注意,在Struts2中,属性比Struts更具类型和表现力。如果另一种类型更合适,请勿使用字符串。您可以将它们初始化为非空值(例如,空字符串)以避免空问题。


JSTL中的if或choose/when/otherwise也是一个不错的选择。 - Steven Benitez

2

为了进一步解释Steven的评论,你可以使用以下方式进行导入:

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

然后使用:

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

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

1

对于字符串,我会使用:

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

对于集合,我会使用:

<s:if test="null == myCollection || myCollection.empty">

希望这对可读性有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接