2015-01-23 8 views
0

У меня есть следующий код в моем JSP:Оценить выражение в JSTL

<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/> 
<c:out value="${myBoolean}"/> 
<c:out value="${requestScope[myBoolean]}"/> 

В пункте у меня есть несколько булевы lockCode1, lockCode2, .... поэтому я использую Елки строки кода, чтобы получить строку "item.lockCode1", "item.lockCode2". Это выражение (item.lock $ {myappli.code.value()}) отлично работает. Я использую его для создания своих флажков:

<form:checkbox path="item.lock${myappli.code.value()}" value="item.lock${myappli.code.value()}"              /> 

Теперь то, что я хотел это оценить значение «item.lockCode1», «item.lockCode2», .... так что я получаю значение из boolean lockCodeX.

Когда я пишу

<c:out value="${myBoolean}"/> 

отображает: item.lockCodeX

Я нашел третью строчку на StackOverflow:

<c:out value="${requestScope[myBoolean]}"/> 

, который я надеялся бы оценить "item.lockCodeX" и дать мне «истинное» или «ложное», то есть его ценность. Но это не работает. Как я могу получить выражение «item.lockCodeX» для оценки true/false?

Спасибо, Е.

PS: Моя конечная цель состоит в том, что я хочу (дез) активировать опцию в соответствии со значением булевой item.lockCodeX. Так я думал о чем-то вроде этого:

<c:choose> 
    <c:when test="here evaluate my expression to true/false"> 
     <form:checkbox   path="item.lock${myappli.code.value()}" 
value="item.lock${myappli.code.value()}" disabled="false"/> 
    </c:when> 
    <c:otherwise> 
     <form:checkbox   path="item.lock${myappli.code.value()}" 
value="item.lock${myappli.code.value()}" disabled="true"/> 
    </c:otherwise> 
</c:choose> 

PS2: Я не могу использовать карту, код так, я не могу изменить его.

PS3: Я попытался написать:

<c:when test="item.lock${myappli.code.value()}"> 

и <c:when test="${item.lock${myappli.code.value()}}"> , но он не работает.

PS4: Вот соответствующие строки элемента объекта:

public class Lot extends BaseEntite { 

... 

    private Boolean lockBEL; 

    private Boolean lockPAR 

    private Boolean lockCIA; 

    private Boolean lockAFA; 

    private Boolean lockLO; 
... 

В моем контроллере я получаю объект из веб-сервиса, и я положил его в ModelAttribute searchForm:

searchMetier.getResultsSearch(context, this.formToDemand(searchForm)); 
+0

От вашего кода, я не получаю какой тип переменных isLockCode1 и lockCode? Является ли элемент коллекцией, содержащей объекты lockCode1, lockCode2, ..., и эти объекты имеют логические поля isLockCode1 или isLockCode2? – drgPP

+0

@drgPP Элемент - это объект, который содержит логические значения, такие как lockCode1, item.lockCode2 и т. Д. – EColi

+0

Можете ли вы опубликовать код, как вы создаете объект объекта ?, и это класс? – drgPP

ответ

0

Что я вижу из вашего кода, так это то, что линия

<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/> дает вам String, поэтому у вас действительно нет доступа к его полям Boolean. Для этого вам необходимо получить значение в элементе ценности Object, поэтому вы можете получить значение Boolean как item.lockBEL.value().

Я хотел бы попробовать следующее:

<c:set var="myItem" value="${item}"> 

<c:set var="myBoolean" value="${myItem.lockBEL.value()}" 

Если вы хотите получить блокировку + (BEL или PAR или ...), когда вы должны использовать некоторые методы, которые EL предоставляет, например, конкатенацию, некоторую информацию here. Проблема в том, что я не очень хорошо знаком с EL, но, поскольку я вижу, что никто не отвечает, я решил попробовать.

PS: я вижу, что вы установите поля, как частные, так что вы должны предоставить некоторые государственные добытчик, чтобы иметь к ним доступ, может быть что-то, как это будет работать: {$myItem.getLockBEL().value()}

Смежные вопросы