Pergunta

Eu vi algum código como o seguinte em um JSP

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

A minha confusão é sobre o "=" que aparece no valor do atributo test. Meu entendimento era que tudo incluído dentro <%= %> é impresso para a saída, mas certamente o valor atribuído ao teste deve ser um booleano, então por que isso funciona?

Para pontos de bônus, há alguma maneira de mudar o valor do atributo acima de tal forma que ele não usa código scriptlet? Presumivelmente, isso significa usar EL vez.

Cheers, Don

Foi útil?

Solução

Tudo o que os olhares de atributos test para determinar se algo é verdade é a string "true" (caso-sensível). Por exemplo, o seguinte código irá imprimir "Olá mundo!"

<c:if test="true">Hello world!</c:if>

O código dentro do <%= %> retorna um booleano, então ele quer imprimir a string "true" ou "false", que é exatamente o que a tag <c:if> olhares para.

Outras dicas

Você também pode usar algo como

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>

A expressão entre o <% =%> é avaliada antes da c: se tag é avaliada. Assim, supondo que | request.isUserInRole | retornos | verdadeiro |, o seu exemplo seria avaliada para este primeiro:

<c:if test="true">
    <li>user</li>
</c:if>

e, em seguida, o c:. Se tag seria executado

Atributos em bibliotecas de tags JSP em geral, pode ser estático ou resolvidos em tempo de solicitação. Se eles são resolvidos em tempo de solicitação do JSP irá resolver o seu valor em tempo de execução e passar a saída para o tag. Isto significa que você pode colocar praticamente qualquer código JSP para o atributo ea marca irá se comportar de acordo com o resultado que produz.

Se você olhar para os docs taglib JSTL você pode ver quais atributos são tempo reuest e quais não são. http://java.sun.com/products/ jsp / JSTL / 1.1 / docs / tlddocs / index.html

<% =%>, por si só será enviado para a saída, no contexto da JSTL que serão avaliados para uma string

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top