Как бы вы вернули возвращенное значение из тега JSTL обратно в оператор EL? - PullRequest
1 голос
/ 14 февраля 2011

По сути, у меня есть собственный тег, который обрабатывает запросы к Java-объекту для меня.

<c:set var="profit">
    <ct:get-profit transaction="${transaction}"/>
</c:set>

Теперь проблема в том, что я хочу использовать это значение (которое является плавающей точкой в ​​операторе if, что я делаю так:

 <c:when test="${profit > 0}">

Когда я делаю это, хотяВ итоге я получаю следующую ошибку:

javax.el.ELException: Cannot convert -141.75 of type class java.lang.String to class       java.lang.Long

Я понятия не имею, как я могу сделать эту работу. У меня сложилось впечатление, что JSTL будет обрабатывать кастинг для вас, это неправильно? В любом случае, как быВы собираетесь сделать эту работу? Спасибо

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

Все, что вы установили в теле из <c:set>, неявно преобразуется в String на Object#toString(). Вместо этого вы хотели бы использовать его атрибут value, который не изменяет тип.

Я бы предложил заменить тег <ct:get-profit> функцией EL. Поскольку этот тег, кажется, не отображает никакой разметки, вы можете сделать это так же хорошо (и лучше) с функцией EL.

<c:set var="profit" value="${ct:getProfit(transaction)}" />

в сочетании с

public static float getProfit(Transaction transaction) {
    // Implement.
}

Более подробный пример настройки такой функции см. В нижней части этого ответа .

1 голос
/ 14 февраля 2011

Можете ли вы попробовать сделать 0.00 вместо 0? <c:when test="${profit > 0.00}">.

Причина, по которой вы должны это сделать, заключается в том, что анализатор EL обрабатывает 0 как Long. Тем не менее, «0,00» рассматривается как число с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...