2011-12-14 2 views
2

Добрый день в моем часовом поясе.Вперед от действия к действию

Я разрабатываю веб-приложение с использованием рамок struts. В простой форме, когда пользователь совершает вызов приложению первое действие, которое будет вызов является SecurityAction, то это действие перенаправляет к одному из двух действий, это, как я сделать редирект:

 if (user == "type_profile") 
      forward = mapping.forward("action2Fwd"); 
    else 
      forward = mapping.forward("action3Fwd"); 
    return forward; 

В распорки-config.xml я есть

<global-forwards> 
    <forward name="action2Fwd" path="/action2.do"/> 
    <forward name="action3Fwd" path="/action3.do"/> 
</global-forwards> 
<action path="/action2" 
      type="com.teste.dummy.action2" 
      name="actionForm" 
      validate="true" 
      input="/action2.jsp"> 
</action> 

Мой первый вопрос: Является ли это лучший способ перенаправить от действия к другому действию?

Второй вопрос: когда я перенаправляюсь к другому действию, actionForm будет выполняться, как я могу узнать, что этот запрос пришел из другого действия?

Внутри формы, если запрос приходит из другого действия, я не хочу ничего проверять, поэтому я должен знать, что этот запрос поступает из другого действия, а не из «браузера», одним из решений является флаг в области запроса или сеанса, указывающий, что этот запрос поступает из другого действия, но является ли это лучшим способом?

ответ

1

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

Флаг может обрабатываться процессором пользовательских запросов для обеспечения поведения приложения. Менее элегантно базовый класс действия может вручную вызывать проверку или не основываться на его присутствии.

Нет другого отличного способа переадресации между действиями, отличными от определения прямого и возвращающего его - будь то глобальный или нет, является вторичным и зависит от потребностей вашего приложения.

+1

Но есть ли способ узнать, кто перенаправить этот запрос? Что-то вроде -> mapping.getWhoRedirect() – tt0686

+0

@ tt0686 Поместив эту информацию в форму (или запрос или что-то еще). Один и тот же флаг можно использовать как для определения того, что он пришел из другого действия, и из какого действия он пришел. Я не уверен, что это * хорошая * архитектура, но механизм звучит. Вы можете * попробовать * использовать реферер, но meh. –

0

Мне приходилось делать это с одним из моих проектов. Вот как я решил свою проблему. Надеюсь, это сработает для вас.

Я вызвал это действие SelectCopyFromProjectAction.do из моего jsp с помощью JavaScript. Это действие называется другим классом, который сделал больше работы.

От Jsp

function selectThisCopyProject(){ 
    document[0].action = "SelectCopyFromProjectAction.do"; 
    submitForm2(); 
}  

struts.config

<action path="/SelectCopyFromProjectAction" type="*****.SelectCopyFromProjectAction" scope="request"> 
    <forward name="success" path="LoadProjectionCopyLOBAction.do?actionType=loadProjects" /> 
    <forward name="failure" path="/WEB-INF/jsp/project_list.jsp"/> 
</action> 

Вторичный Класс Нападающие новое действие, как показано на стойках. конфиг <forward name="success" path="LoadProjectionCopyLOBAction.do" />

Если вперед «успех» это приводит к этому действию в конфигурации:

<action path="/LoadProjectionCopyLOBAction" type="*******.LoadProjectionCopyLOBAction" name="ProjectCopyFormBean" validate="false" scope="request" > 
    <forward name="" .... /> 
</action> 
Смежные вопросы