Существует ли общая ссылка на активную форму в Struts для JSP? - PullRequest
1 голос
/ 11 февраля 2010

Я использую распорки 1.3.10

В JSP я могу ссылаться на объект из формы, связанной с действием. Так что я могу иметь:

<bean:define id="someObject" name="myCurrentActionForm" property="someObject"/>

Где моя форма определена в struts-config.xml.

В моем случае выше "someObject" фактически определяется в базовом классе, от которого наследуется myCurrentActionForm.

Но мне нужно сослаться на "someObject" в общем виде.

Я пытался:

<bean:define id="someObject" name="baseForm" property="someObject"/>

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

Мне нужно определить этот компонент в общем фрагменте JSP. Есть ли способ ссылаться на форму, связанную с действием, в общем виде?

ТИА

Ответы [ 2 ]

1 голос
/ 12 февраля 2010

Если вы используете:

<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, они даже не заботятся о том, что это экземпляр подкласса.

1 голос
/ 11 февраля 2010

Вот как я это сделал.

<jsp:useBean id="baseForm" class="web.common.BaseForm" scope="application"/>

Это создает один экземпляр в области приложения, который я могу использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...