2013-04-08 6 views
5

Мне нужен способ выполнения нескольких действий struts с одним запросом. Цель состоит в том, чтобы свести к минимуму необходимость запроса к серверу. Так что мне нужно что-то вроде «MultiAction», который получает список действий в качестве параметров, которые он должен выполнить, а затем возвращает «комбинированный» результат этих действий.Выполнение нескольких действий один за другим

Например:

  • клиент разделен на множество модулей
  • Один модуль должен получить информацию от сервера
  • Существует прокси на клиенте обработки этого запроса
  • Этот прокси теперь идет и говорит: «Эй, другие модули, я собираюсь сделать rquest на сервере, вам что-нибудь понадобится?»
  • Других модули могут теперь необязательно подать запрос на прокси-сервере
  • Тогда фактический «комбинированный» запрос обжигал на сервер и результат снова разделился и данным модулям, которые просили его

So мои вопросы таковы:

  1. Есть ли стандартный способ в Struts2, как это сделать?
  2. Существует ли стандартный «общедоступный» способ вызова другого действия вручную и получения его результатов из значения Stack?
+0

Можете ли вы создать реальный базовый пример этого? –

+3

Есть цепочка действий, почти всегда плохая идея. Есть тег Actonj, как упоминалось.Тем не менее, мне сложно представить, где это было бы полезно - похоже, у вас слишком много поведения, требуемого от неправильного места. –

ответ

0

Запрос> Действие 1> Действие 2> Ответ В Struts 2, это может быть достигнуто за счет цепочки результата. Результат цепочки - это тип результата, который вызывает действие со своим стеком и результатом перехватчика. Этот Interceptor позволяет Управлению пересылать запросы на целевое действие, одновременно распространяя состояние исходного действия. Ниже приведен пример того, как определить эту последовательность.

<package name="public" extends="struts-default"> 
      <action name="createUserAccount" 
       class="net.onlineSolution.CreateAccountAction"> 
       <result name="success" type="chain">login</result> 
      </action> 
      <action name="login" 
       class="net.onlineSolution.LoginAction"> 
       <result name="success" type="chain">showDashboard</result> 
      </action> 
      <action name="showDashboard" 
       class="net.onlineSolution.DashboardAction"> 
       <result name="success">/WEB-INF/jsp/dashboard.jsp</result> 
      </action> 
    </package> 

В приведенном выше коде мы определяем три действия: createUserAccount, login и showDashboard. Обратите внимание, как каждое действие приковано к следующему, используя тег. Таким образом, когда пользователь регистрируется в первый раз в системе, будет использоваться действие createAccount. После создания учетной записи пользователь пересылается для входа в систему.

0

Хорошо. Это очень возможно, используя простой тип результата struts. Чтобы обработать несколько действий в одном действии, вы можете использовать <result name="success" type="redirectAction"></result> в свойстве результата. С помощью этих нескольких действий вы также можете передать n количество параметров, используя <param> Недвижимость struts.xml. Следующий образец кода предназначен для справки: -

<result name="success" type="redirectAction"> 
    <param name="actionName">[.. you can write another action here ..]</param> 
    <param name="[.. parameter name ..]">${.. parameter name ..}</param> 
</result> 
2

Этого можно достичь с помощью «redirectAction» в типе результата. следующий код - пример для этого. вам нужно настроить тег действия в struts XML в соответствии с вашим требованием использования вложенных действий.

 <action name="userHomeAction" class="com.etp.connect.struts.action.UserHomeAction"> 
     <result type="redirectAction" name="SUCCESS_EDIT"> 
      <param name="actionName">getUserEditData</param> 
      <param name="selectedUser">${selectedUser}</param>   
     </result> 
     <result name="error">/jsp/userMgmt/Users_Home.jsp</result> 
     <result name="login">/jsp/loginMgmt/Login.jsp</result> 
    </action> 
Смежные вопросы