<s:if>测试表达式对布尔值的评估不能按预期工作</s:if>

时间:2014-04-15 05:51:07

标签: java jsp struts2 ognl boolean-expression

我想使用Struts2标记bool_val来检查变量<s:if>的值,但它无效。

<%@ taglib prefix="s" uri="/struts-tags" %>

<%boolean bool_val=true;%>
real value : <%=bool_val%><br/>
expression evaluated value : 
<s:if test="%{bool_val==true}">
    TRUE
</s:if><s:else>
    FLASE
</s:else>

我也尝试过跟踪测试表达式,但仍无效。

<!-- 
bool_val
bool_val==true
%{bool_val}
%{bool_val==true}
%{bool_val=="true"}
 -->

4 个答案:

答案 0 :(得分:7)

使用struts标签创建一个像这样的变量

<s:set var="bool_val" value="true" />
expression evaluated value : 
<s:if test="%{#bool_val == true}">
    TRUE
</s:if><s:else>
    FALSE
</s:else>

这是sample tutorial

答案 1 :(得分:2)

除非将此变量放入值堆栈,否则不能在Struts标记中使用scriptlet变量。但是你最好不要使用scriptlet变量,而是使用变量值。

<%@ taglib prefix="s" uri="/struts-tags" %>

<%boolean bool_val=true;%>
real value : <%=bool_val%><br/>
expression evaluated value : 
<s:set var="bool_val"><%=bool_val%></s:set>
<s:if test="#bool_val == 'true'">
    TRUE
</s:if><s:else>
    FALSE
</s:else>

答案 2 :(得分:2)

Visruth CV建议的版本更短:

<s:set var="foo" value="true" />

expression evaluated value : 
<s:if test="foo">
    TRUE
</s:if><s:else>
    FALSE
</s:else>

如果您想根据Action属性检查布尔值,可以采用以下方法:

class FooAction extends ActionSupport {
    private Boolean _bar = true;

    public Boolean isBar() { return _bar; }
}

在jsp文件中:

expression evaluated value : 
<s:if test="isBar()">
    TRUE
</s:if>
<s:else>
    FALSE
</s:else>

答案 3 :(得分:0)

如果Action类中的布尔变量的getter方法是public double getDistance(double points1[], double points2[]) 然后使用isBool() 关键是要从方法名称中删除并使用。 if方法是<s:if test="bool">使用isApple() 很简单