Можно ли использовать 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>
:
<jsp:useBean id=”connection” class=”com.myco.myapp.Connection” />
, В этом примере бин с идентификатором становится доступным либо путем создания, либо поиска существующего в сеансе<jsp:useBean id=”connection” class=”com.myco.myapp.Connection”> <jsp:setProperty name=”connection” property=”timeout” value=”33”> </jsp:useBean>
, В этом примере бин создается или обнаруживается и устанавливается с помощьюsetProperty
если оно создается.<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");
}
%>