JSP отмечают жизненный цикл

Оказывается, я исключил *test.ts* in my tsconfig.json per the TypeScript example, which I guess meant that ts-jest` не собирал их. После удаления этого исключения все сработало. Привет Яннику Миусу за помощь в решении этой проблемы.

11
задан Mogsdad 21 April 2016 в 02:09
поделиться

4 ответа

Вы ответили на вопрос сами - он объединен. См. учебное руководство по тегу для того, что реализовать в реализациях Java, вместе со страницей, связанной оттуда, содержа последовательность вызова:

ATag t = new ATag();
t.setPageContext(...);
t.setParent(...);
t.setAttribute1(value1);
t.setAttribute2(value2);
t.doStartTag();
t.doEndTag();
t.release();

Таким образом, повторно инициализируйте свой экземпляр тега в doEndTag (), поскольку API требует. (измененный с комментария Julien Kronegg, спасибо)

Обратите внимание, что объединение, вероятно, является контейнерным зависимым, но хорошо законный (и, из-за установки API, вероятно, сделанной везде).

12
ответ дан 3 December 2019 в 04:34
поделиться

таким образом, ответ: тег объединен в волшебную землю пула и снова используется между выполнением. спецификация тега говорит:

"Неуказанные атрибуты/свойства не должны быть установлены (использование метода установщика)".

1
ответ дан 3 December 2019 в 04:34
поделиться

Наблюдение за Tomcat 6 предполагает, что release () вызывается только при завершении работы контейнера. Члены экземпляра обработчика тегов должны очищать состояние экземпляра в doEndTag (). Из api doc:

«Все состояния экземпляра, связанные с этим экземпляром, должны быть сброшены».

см. TagSupport.doEndTag ()

0
ответ дан 3 December 2019 в 04:34
поделиться

Краткий ответ: Вы не должны сами писать атрибутные свойства. Поступая так, вы возьмете на себя ответственность за очистку состояния.

Для более подробного ответа, спецификация JSP 2.0 диктует следующее (стр. 2-51):

  • Сеттеры вызываются для всех заданных атрибутов конкретного вхождения тег
  • Установщики не вызываются для пропущенных атрибутов (оставляя значения по умолчанию нетронутыми и, в вашем случае, недопустимое значение во внутреннем состоянии)
  • Обработчики тегов могут быть только повторно используется экземплярами с тем же набором указанных атрибутов

Эти три точки вместе гарантируют, что свойства атрибута всегда правильно инициализируются, при этом сохраняя значения по умолчанию (определенные в конструкторе или объявлении свойств). В свою очередь, он работает только в предположении, что только контейнер управляет свойствами атрибута (вызывая сеттеры).

Для полноты:

  • release () не следует использовать для сброса внутреннего состояния между вызовами обработчика тега. Он гарантированно вызывается только перед сборкой мусора и должен использоваться для освобождения долгосрочных ресурсов.
  • Если вы хотите инициализировать переменные экземпляра в doStartTag () , будьте осторожны, чтобы не перезаписать атрибуты, потому что в этот момент установщики уже были вызваны контейнером.
  • doEndTag () должен быть безопасным для использования для инициализации, потому что теги никогда не должны использоваться повторно в случае исключения (см. Стр. 2-54 [2])
8
ответ дан 3 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: