OGNL中的条件检查

时间:2014-01-01 06:24:16

标签: jsp struts2 ognl

我想用对象图导航语言(OGNL)表示以下JSTL代码。

<c:set var="idError"><s:fielderror fieldName="transporterId"/></c:set>
<c:set var="chkError"><s:fielderror fieldName="chk"/></c:set>
<c:set var="currentPageError"><s:fielderror fieldName="currentPage"/></c:set>

<c:if test="${not empty idError or not empty chkError or not empty currentPageError}">
    <div class="errorblock">
        <s:fielderror fieldName="transporterId"/>
        <s:fielderror fieldName="chk"/>
        <s:fielderror fieldName="currentPage"/>
    </div>
</c:if>

我尝试了以下内容。

<s:set var="idError"><s:fielderror fieldName="transporterId"/></s:set>
<s:set var="chkError"><s:fielderror fieldName="chk"/></s:set>
<s:set var="currentPageError"><s:fielderror fieldName="currentPage"/></s:set>

<s:if test="%{(#idError!=null and #idError!='') or (#chkError!=null and #chkError!='') or (#currentPageError!=null and #currentPageError!='')}">
    <div class="errorblock">
        <s:fielderror fieldName="transporterId"/>
        <s:fielderror fieldName="chk"/>
        <s:fielderror fieldName="currentPage"/>
    </div>
</s:if>

这仅适用于第一次条件检查#idError!=null and #idError!=''。其余条件从未评估为真?

使用OGNL表示给定JSTL代码的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我不知道有问题但在这种情况下,我试图根据特定字段是否有错误显示错误消息。

在这种情况下,由于字段错误存储在fieldErrors地图中,因此可以使用<s:if>检查特定的字段错误,如下所示。

<s:if test="fieldErrors.containsKey('transporterId') or fieldErrors.containsKey('chk') or fieldErrors.containsKey('currentPage')">
    <div class="errorblock">
        <s:fielderror fieldName="transporterId"/>
        <s:fielderror fieldName="chk"/>
        <s:fielderror fieldName="currentPage"/>
    </div>
</s:if>

这足以满足我的要求。


通过使用以下简单的条件检查也可以做到这一点。

<s:if test="hasFieldErrors()">
    <div class="errorblock">
        <s:fielderror fieldName="transporterId"/>
        <s:fielderror fieldName="chk"/>
        <s:fielderror fieldName="currentPage"/>
    </div>
</s:if>

但在这种情况下,我只需检查选定的字段,看看它们是否产生了一些错误,并且检查请求提交的所有字段。因此,需要像第一种情况一样检查所有选定的字段(不是全部)。

这些选定的字段通常是隐藏字段或查询字符串参数。

它们生成的任何错误都显示在块中的一个位置,而其他字段(如<s:textfield>等输入组件生成的任何错误都显示在它们旁边。