我想用对象图导航语言(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代码的正确方法是什么?
答案 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>
等输入组件生成的任何错误都显示在它们旁边。