'#' Personagem antes expressão EL utilizado dentro de uma tag JSTL comportamento estranho
Pergunta
Eu tenho o seguinte código para definir uma variável userId:
(conjunto userId no código anterior)
<c:set var="userId" value="(Cust#${userId})" />
Que produz a seguinte cadeia: (Cust # $ {userId})
O código a seguir funciona como esperado, no entanto:
<c:set var="userId" value="(Cust# ${userId})" />
exibe o seguinte string (Cust # 0001).
Por que o caractere '#' antes de um '{string} $' expressão evitar que a corda de ser avaliado? Existe um trabalho em torno eu poderia usar isso não envolver ter que inserir um espaço?
Solução
Desde JSF usaria:
#{userId}
Para retornar um usuário Id, Atrevo-me a adivinhar que este seja um bug ou comportamento esperado causado pelo sinal # tornando o analisador infeliz. Basta usar qualquer um:
<c:set var="userId" value="(Cust#${userId})" />
<c:set var="userId" >(Cust#${userId})</c:set>
Outras dicas
Eu testei o exposto, e ele não funciona. Sua ouput seria:
Cust # 0002 ou o que quer.
Você pode usar uma fuga para obtê-lo para o trabalho certo, entretanto. Por exemplo:
<c:set var="userId" value="(Cust\#${userId})" />
A saída é:
Cust # 0002