Widziałem jakiś kod jak poniżej w JSPatrybut testu w JSTL <c:if> tagu
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
Mój błąd jest nad „=”, który pojawia się w wartości atrybutu test
. Rozumiem, że wszystko, co zawiera <%= %>
, jest drukowane na wyjściu, ale z pewnością wartość przypisana do testu musi być wartością logiczną, więc dlaczego to działa?
Za punkty bonusowe, czy istnieje sposób zmiany wartości atrybutu powyżej, tak aby nie zawierał kodu skryptu? Przypuszczalnie oznacza to użycie EL.
Cheers, Don
<%= => pobiera drukowane na wyjściu pojawia się tylko wtedy, gdy na zewnątrz znacznika JSP, a poniżej odpowiedź powiedział. Jednak * nie * jest obliczane na łańcuch znaków, ale jest konwertowane na typ oczekiwany przez atrybut. Atrybut 'test' tagu' 'ma typ' boolean', więc każde wyrażenie zwracane przez skryptlet będzie przekształcane na 'boolean'. –
mksios
Chociaż interesujące jest to, że po połączeniu ciągu znaków i skryptletu w atrybucie znacznika JSP, silnik zostaje pomieszany i interpretuje całą wartość jako ciąg znaków. Oznacza to, że '' nie uruchomi skryptletu, ale zamiast tego zmusi ciąg 'abc <%= true %>' do wartości logicznej przez 'Boolean.valueOf()', która zwraca 'false'. http://stackoverflow.com/questions/8168821/comparing-string-and-boolean-in-expression-language –
mksios