‹s:if› вычисление тестового выражения для логического значения не работает должным образом

Я хочу проверить значение переменной bool_val с помощью тега Struts 2 <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"}
 -->

person Akash Jain    schedule 15.04.2014    source источник


Ответы (4)


Вы не можете использовать переменную скриптлета в тегах Struts, если не поместите эту переменную в стек значений. Но лучше использовать не переменную скриптлета, а значение переменной.

<%@ 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>
person Roman C    schedule 15.04.2014

Используйте тег 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>

Вот пример руководства.

person Visruth    schedule 15.04.2014

Существует более короткая версия предложенной 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>
person Simon    schedule 14.04.2015
comment
Мне нравится этот ответ больше, потому что вызов метода свойства isBar() менее сложен и подвержен ошибкам, чем выбранный ответ @roman-c. - person johnnieb; 11.02.2017

Если метод получения для вашей логической переменной в классе Action равен isBool(), используйте <s:if test="bool">. Ключ в том, чтобы удалить is из имени метода и использовать. Например, если метод isApple(), используйте <s:if test="apple">.

person Rohit Reddy Abbadi    schedule 08.12.2015