Можно ли использовать usebean в JSP?

У меня есть приложение, которое позволяет пользователю сделать поиск.

На основе введенных критериев поиска выполняется служебный вызов функции DAO (событие шаблона jsp -> перехватчики -> процессоры -> службы -> DAO -> база данных) и возвращается список результатов, который отображается в myView.jsp

Код, приведенный ниже, используется для чтения данных TO в JSP:

<jsp:usebean id="myTO" type="com.myPackage.MyTO" scope="session"/>

а в теле что то типа

<%= myTo.getSomething() =%>

Каждый элемент в списке кликабелен для деталей. Таким образом, при нажатии на пункт 2 в списке будет сделан еще один вызов с идентификатором элемента 2, чтобы получить более подробную информацию о элементе 2.

В зависимости от типа элемента, детали выбираются в разных TO. например, Type1TO, Type2TO.

Таким образом, подробные данные о товаре возвращаются в одном таком ТО.

Проблема: я показываю детали в той же JSP. Таким образом, returnURL второго запроса перенаправляется в myView.JSP.

Итак, я поставил строку, как

<jsp:usebean id="type1TO" type="com.myPackage.Type1TO" scope="session"/>

Однако это дает ошибку при первом вызове поиска по списку, когда вышеупомянутого Type1TO еще не существует. Ошибка - что-то вроде "невозможно найти type1TO в сеансе области"

Как я мог решить эту проблему???

Есть ли способ поместить тег jsp:usebean в условие if в том месте, где он должен использоваться в теле? Или любое другое решение этого??

Я новичок в JSP и имею дело с устаревшей JSP. Так что очень продвинутый JSP (сложный EL) может быть невозможен.

2 ответа

Решение

Ниже приведены примеры использования <usebean>:

  1. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection” />, В этом примере бин с идентификатором становится доступным либо путем создания, либо поиска существующего в сеансе
  2. <jsp:useBean id=”connection” class=”com.myco.myapp.Connection”> <jsp:setProperty name=”connection” property=”timeout” value=”33”> </jsp:useBean>, В этом примере бин создается или обнаруживается и устанавливается с помощью setProperty если оно создается.
  3. <jsp:useBean id=”wombat” type=”my.WombatType” scope=”session”/>, В этом примере существующий компонент найден и доступен для данного типа.

Если перевести на Servlet, ваш первый фрагмент кода будет выглядеть так:

getAttribute("myTO");

Использовать ли один атрибут или "несколько атрибутов с логикой if-else" зависит от вашего конкретного случая. Не понимая вашей конкретной ситуации, я вижу следующие варианты:

Вариант 1 Везде, где вы устанавливаете атрибут myTO, убедитесь, что вы устанавливаете значение в одну и ту же переменную, чтобы вам не приходилось использовать логику if-else в jsp.

Вариант 2 Использование скриптов

<%
  com.myPackage.MyTO toObject = session.getAttribute("myTo");
  if (toObject == NULL) {
      toObject = session.getAttrbute("type1TO");
  }
%>
Другие вопросы по тегам