Передача значения в настраиваемый тег, дающее NumberFormatException

Я определил специальный тег, который принимает один параметр, число, которое затем использует для поиска информации и возврата. Однако я продолжаю получать исключение NumberFormatException. Я передаю номер тегу в моем jsp с помощью EL.

<my:myTag id="${action.id}"/>

В классе bean-компонента для Action:

private int id;
private void setId(int id){
this.id = id;
}
private int getId(){
return id;
}

В моем обработчике пользовательского тега:

private int id;
//getters and setters for id
public int doStartTag() throws JSPException {
//Does some stuff with id
}

В моем tld (пропущены некоторые вещи):

<attribute>
   <name>id</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
</attribute>

Тег делает то, что я хочу, если я просто передаю число (например, id = "6"), но всегда выдает исключение, когда я пытаюсь использовать значение выражения EL. Происходит ли где-то преобразование int-string при вычислении выражения или что-то в этом роде? Это поле типа int в bean-компоненте, и я предполагал, что оно будет просто пропущено как таковое? Я попытался изменить атрибут своего обработчика тегов на String и Integer, но ни один из них не решил эту проблему. Я установил для rtexprvalue значение true, поэтому он должен правильно его оценивать. Любая помощь приветствуется.


person Paul    schedule 14.02.2012    source источник
comment
Где именно вы получаете исключение нулевого указателя?   -  person Sajan Chandran    schedule 14.02.2012
comment
Какой движок JSP и какая версия? Более старые версии спецификации JSP не включали синтаксический анализ / оценку EL в фазе компилятора JSP - выражения должны были оцениваться вручную с помощью тега.   -  person Tim    schedule 14.02.2012
comment
@ Тим Спасибо. Это указывало мне в правильном направлении, и действительно, выражение приходилось вычислять вручную в обработчике тега. Если вы хотите сформулировать это как ответ, я приму его.   -  person Paul    schedule 14.02.2012


Ответы (1)


Хорошо, это более длинная версия моего комментария выше ...

В JSP 1.x механизм JSP ничего не знал о языке выражений. EL был определен как часть JSTL, но он был встроен в сами теги, движок не участвовал в оценке.

В JSP 2.0 EL был перемещен в спецификацию JSP, и движок поддерживает его. В JSP 2.1 EL был объединен с JSF EL.

Итак, если вы используете JSP 1.x, вам придется выполнить EL самостоятельно.

Но, чтобы усложнить задачу, в JSP 2.0 был упрощен API для обработчиков клиентских тегов. В JSP 1.x теги реализованы Tag, но в JSP 2.0 теги реализуют SimpleTag.

Механизм JSP 2.x будет поддерживать теги стиля JSP 1.x (классы, реализующие Tag), но будет обрабатывать их так же, как JSP 1.x обработал их - EL не оценивается механизмом, и тег должен быть явно оценить это.

Что касается rtexprvalue, он фактически контролирует, поддерживается ли выражение скриптлета, а не поддерживается ли выражение EL (этот атрибут предшествует EL).

person Tim    schedule 16.02.2012