<s:if> test expression evaluation for boolean value doesn't work as expected

39,488

Solution 1

You can't use a scriptlet variable in Struts tags unless you put this variable to the value stack. But you'd better not use a scriptlet variable, but the variable value.

<%@ 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>

Solution 2

Use struts tag to create a variable like this

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

Here is a sample tutorial.

Solution 3

There is a shorter version to the one suggested by Visruth CV :

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

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

In case you want to check the boolean value against an Action attribute, here is the way to go :

class FooAction extends ActionSupport {
    private Boolean _bar = true;

    public Boolean isBar() { return _bar; }
}

And in the jsp file :

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

Solution 4

If getter method for your boolean variable in Action class is isBool() then use <s:if test="bool">. The key is to remove is from the method name and use. For example, if method is isApple() use <s:if test="apple">.

Share:
39,488
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I want to check value of variable bool_val using Struts 2 tag <s:if> but it's not working.

    <%@ 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>
    

    I also tried following test expressions too, but still not working.

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