Struts 2中与Struts 1的logic:empty标签相当的是什么?
<logic:empty name="foo">
Foo is null or the empty string
</logic:empty>
谢谢。
Struts 2中与Struts 1的logic:empty标签相当的是什么?
<logic:empty name="foo">
Foo is null or the empty string
</logic:empty>
没有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的测试。
如果经常需要进行此类测试,则可能存在设计问题。通过适当的验证,您不应该有未初始化的对象,因为视图依赖于它们,但我想总会有例外情况。
补充Quaternion的回答:
您可以在操作中添加一个检查特定条件的方法,例如 MyAction.isPropertyXEmpty()
并将其放在 <if test=...>
条件中。
请注意,在Struts2中,属性比Struts更具类型和表现力。如果另一种类型更合适,请勿使用字符串。您可以将它们初始化为非空值(例如,空字符串)以避免空问题。
为了进一步解释Steven的评论,你可以使用以下方式进行导入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
然后使用:
<c:if test="${empty myStruts2Var}">
<c:if test="${not empty myStruts2Var}">
对于字符串,我会使用:
<s:if test="myString in {null, ''}">
<s:if test="null == myCollection || myCollection.empty">