2012-05-30 4 views
2

Я не могу понять, почему это не работает. В основном следующий фрагмент кода отлично работает, если только c:if не является истинным.Сброс значения JSTL

Если утверждение if истинно, тогда clientId следует установить вручную в 1. Это действительно работает, но по какой-то причине он не будет получать клиентские приложения.

ClientId = 1 отлично работает, если он извлекается из переменной «пользователь» сеанса. Таким образом, клиентские приложения должны иметь что-то в точке 1. Любая подсказка?

<c:set var="clientId" value="${sessionScope['user'].client.clientId}"/> 
<c:if test="${empty sessionScope['user'].client.clientId}"> 
    True 
    <c:set var="clientId" value="1" /> 
</c:if> 

<c:set var="clientProperties" value="${clientProps[clientId]}"/> 
<c:set var="clientLogo" value="${clientProperties.clientLogo}"/> 
<c:set var="clientURL" value="${clientProperties.clientWebURL}" /> 
clientId = ${clientId} 
clientLogo = ${clientLogo} 
clientURL = ${clientURL} 

Результат, если пользователь-объект существует:

clientId = 1 clientLogo = /images/logos/Logo1.png clientURL = http://www.xxx.xxx

Результат, если существует пользователь-объект Безразлично:

True clientId = 1 clientLogo = clientURL =

+0

Являются ли типы 'clientId' одинаковыми в обоих случаях? –

+0

Это длинный, когда он извлекается из объекта «Пользователь». Что это, когда я вручную установил его, я не знаю .. – user829237

+0

Вы пытались установить его на долго? Не знаю, решит ли он проблему. –

ответ

3
<c:set var="clientId" value="1" /> 

Это устанавливает его в качестве String в то время как ключ карты, по-видимому, Long.

Вместо этого вы должны установить его как Long.

<c:set var="clientId" value="${1}" /> 

Числа в EL неявно рассматривается как Long, поэтому выше будет работать.