2011-12-14 5 views
2

안녕하세요.행동에서 행동으로 전진

저는 struts 프레임 워크를 사용하여 웹 응용 프로그램을 개발 중입니다. 에서

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

: 사용자가 통화가 SecurityAction,이 작업은 두 작업 중 하나로 리디렉션 인 것으로 응용 프로그램을 처음 작업을 호출 할 때 간단한 방법으로 는이 내가 리디렉션을 어떻게 스트럿 - 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

그러나이 요청을 리디렉션 사람 찾을 수있는 방법이있다 : <forward name="success" path="LoadProjectionCopyLOBAction.do" />

전진은 "성공"는 설정에서이 작업에 이르게 경우 설정 ? 비슷한 것 -> mapping.getWhoRedirect() – tt0686

+0

@ tt0686 해당 정보를 양식 (또는 요청 등)에 넣음으로써. 같은 플래그를 사용하여 다른 액션에서 왔는지, 어떤 액션에서 왔는지 식별 할 수 있습니다. 나는 이것이 * 훌륭한 * 아키텍처라고 확신하지는 않지만 메커니즘은 건전합니다. 당신은 리퍼러를 사용하여 * 시도 할 수 있지만, 그렇습니다. –

0

나는 내 프로젝트 중 하나와 함께해야만했다. 이게 내가 내 문제를 해결 한 방법이야. 나는 그것이 당신을 위해 일하기를 바란다.

자바 스크립트를 사용하여이 작업을 내 jsp에서 SelectCopyFromProjectAction.do라고했습니다. 이 작업은 다른 클래스를 호출하여 더 많은 작업을 수행했습니다. 스트럿츠에서 볼 수 있듯이

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

JSP 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> 

차 클래스 전달하는 새로운 액션.

<action path="/LoadProjectionCopyLOBAction" type="*******.LoadProjectionCopyLOBAction" name="ProjectCopyFormBean" validate="false" scope="request" > 
    <forward name="" .... /> 
</action>