Как искать настроенное действие Struts - PullRequest
0 голосов
/ 01 июня 2011

Я хочу сделать следующее:

final Action myAction = getActionDefinedInStrutsConfig(param);
myAction.execute(params);

Есть ли способ поиска действий, инициализированных ActionServlet?

Я могу создать новое, например, так:

 final Action myAction = new ActionImpl();
 myAction.execute(params);

но при этом новое действие не инициализируется должным образом, присоединенный сервлет не устанавливается и getServlet () возвращает ноль.


Немногоразъяснение, почему мне это нужно:

Проблема в том, что у меня в настоящее время есть 2 страницы входа.Один для обычных пользователей и один для администраторов.Они должны быть полностью отдельными системами, но на самом деле это не так.Мне нужно создать страницу входа «прокси», которая решает, какую страницу входа перенаправить в соответствии с запросом.Если я перенаправлю на URL, пользовательский интерфейс будет нарисован.Мне нужно вызвать действия пользователя или администратора, чтобы обработать мой запрос прокси-страницы.Кроме того, перемещение логики внутри службы, хотя и является правильным подходом, в настоящее время недоступно.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Хорошо, так как я понимаю, что вы имеете в виду, вот что я бы предложил:

  • Используйте ваше действие в целях проверки, то есть для извлечения данных из ActionForm и проверки на достоверность. Как только вся информация готова, отправьте ее в службу.
  • Служба (должна быть не веб-службой, а простым POJO) будет иметь бизнес-логику приложения с соответствующими исключениями и типами возвращаемых данных. Как только вы вызываете соответствующую службу с ее методом, получите результат и, наконец,
  • Заполните необходимые ActionForm или выполните mapping.findForward().

Таким образом, если вам нужна другая бизнес-логика, используемая другим действием Struts, лучше вызвать службу, которую использует второе действие. Это эффективный способ повторного использования кода и хорошая практика ООП.

Надеюсь, это поможет.


Взломанный способ будет сделать это:

final Action myAction = new ActionImpl();
myAction.setServlet(getServlet());
/* ONLY if your form enctype is "multipart/request-data". */
myAction.setMultipartRequestHandler(getMultipartRequestHandler());

//Finally
myAction.execute(params);
0 голосов
/ 01 июня 2011

Вы можете определить действия в ваших форвардах:

    <action parameter="command" path="/firstAction"
        input="firstAction.tiles" name="someForm" scope="session" validate="true" type="com.mycompany.FirstAction">
        <forward name="toSecond" path="/secondAction.do?command=someMethod" redirect="true"/>
    </action>

    <action parameter="command" path="/secondAction" input="secondAction.tiles" name="someForm"
        scope="session" validate="true" type="com.mycompany.SecondAction">
        <forward name="backToFirst" path="/firstAction.do?command=myMethod" redirect="true" />
    </action>

Теперь вы можете использовать mapping.findForward("toSecond") в своем первом действии и mapping.findForward("backToFirst") в другом.

...