2014-04-15 32 views
6

Chcę sprawdzić wartość zmiennej bool_val przy użyciu znacznika Struts2 <s:if>, ale nie działa.<s:if> Ewaluacja wyrażenia testowego dla wartości boolowskiej nie działa zgodnie z oczekiwaniami.

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

Próbowałem również następujących wyrażeń testowych, ale nadal nie działa.

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

Odpowiedz

2

Nie możesz użyć zmiennej scriptlet w tagach Struts, chyba że umieścisz tę zmienną w stosie wartości. Ale lepiej nie używaj zmiennej scriptlet, ale wartości zmiennej.

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

Zastosowanie rozpórki tag aby utworzyć zmienną jak to

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

Oto sample tutorial.

2

Jest krótsza wersja do jednego sugerowanej przez Visruth CV:

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

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

W przypadku, gdy chcesz sprawdzić wartość logiczną przeciwko atrybutu Akcja Oto droga:

class FooAction extends ActionSupport { 
    private Boolean _bar = true; 

    public Boolean isBar() { return _bar; } 
} 

A w pliku jsp:

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

lubię tę odpowiedź lepiej ponieważ wywołanie 'isBar()' metoda nieruchomość jest mniej skomplikowany i podatny na błędy następnie wybrana odpowiedź przez @ roman-c. – johnnieb

0

Jeśli metoda getter dla zmiennej boolean w klasie Action to isBool() , wówczas należy użyć klawisza <s:if test="bool"> , aby usunąć z nazwy metody i użyć. jeśli metoda jest isApple() użycie <s:if test="apple"> proste