Если вы используете:
<jsp:useBean id="baseForm" class="web.common.BaseForm" scope="application"/>
и позже вы используете:
<bean:define id="someObject" name="baseForm" property="someObject"/>
у тебя не должно быть проблем. <jsp:useBean>
создаст объект в области приложения, если он не существует, и у <bean:define>
не должно возникнуть проблем с его извлечением, поскольку он выполняет pageContext.findAttribute(...)
поиск всех областей.
Если вы получаете сообщение «Cannot find bean:« baseForm »в любой области видимости», это означает, что при вызове <bean:define>
формы нет (возможно, вы сначала не вызывали <jsp:useBean>
?).
Еще одна вещь: область применения приложения не только означает, что все файлы JSP будут иметь доступ к компоненту, но также и все клиенты будут использовать один и тот же объект. Вы можете столкнуться с проблемами, если у этого компонента есть состояние, которым вы делитесь между пользователями. Один пользователь может иметь доступ к конфиденциальным данным другого.
РЕДАКТИРОВАТЬ: Чтобы понять это право ... вы просто хотите ссылаться на текущую форму действия (независимо от того, что будет) в общих файлах JSP, независимо от имени, которое вы указали в Struts-config (myCurrentActionForm, someOtherCurrentActionForm и т. д.) и просто с помощью квалификатора, например baseForm
?
Если да, то вы можете создать родительский класс Action
, который будет расширять все остальные классы действий. В методе execute(mapping, form, request, response)
этого родительского класса вы просто помещаете ссылку на form
в желаемой области (вы можете извлечь точную область из объекта mapping
или просто сохранить ее в любой области, которую хотите, используя baseForm
name - я бы держался подальше от сферы применения).
Затем вы могли бы использовать Шаблон метода шаблона для вызова действий подкласса execute
методов или вы можете прибегнуть к методу подкласса execute
, вызывающему родительский метод execute
, чтобы выполнить свою задачу.
Попав в JSP, вы сможете получить доступ к форме, используя baseForm
. Теги не заботятся о том, что является областью действия, потому что они будут искать, пока не найдут объект. Если вы придерживаетесь свойств из web.common.BaseForm
, они даже не заботятся о том, что это экземпляр подкласса.