Java Struts 1 : 행동에서 행동으로의 앞으로. ActionForms를 통해 데이터를 전달합니다
문제
우리는 데이터가 해당하는 사이에 전달되기를 바라고 한 조치에서 다른 작업으로 리디렉션하려고했습니다. ActionForm
콩. 첫 번째 조치는 브라우저에서 요청을 받고 데이터 필드를 인쇄 한 다음 다른 작업으로 전달하여 동일한 필드를 인쇄하고 JSP로 리디렉션합니다.
문제는 그 것입니다 ActionTo
잘못된 값을 인쇄하고 있습니다 commonInt
기본값이 있습니다 0
, 우리가 기대하는 동안 35
.
다음은 표현 예입니다.
public class ActionFrom extends DispatchableAction{
public ActionForward send(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){
FormA formA = (FormA)form;
formA.commonInt = 35;
System.out.println("sent: "+formA.commonInt);
return mapping.findForward("send");
}
}
public class ActionTo extends DispatchableAction{
public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){
FormB formB = (FormB)form;
System.out.println("recv= "+formB.commonInt);
return mapping.findForward("send");
}
}
ActionForms는 다음과 같습니다.
public class FormA extends ActionForm {
public int intA;
public int commonInt;
}
public class FormB extends ActionForm{
public int intB;
public int commonInt;
}
매핑 :
<action path="/from" type="EXPERIMENT.ActionFrom" name="formA" scope="request"
input="something.jsp" parameter="dispatch" unknown="false" validate="false">
<forward name="send" path="/to.do?dispatch=recv" redirect="false"/>
</action>
<action path="/to" type="EXPERIMENT.ActionTo" name="formB" scope="request"
input="something.jsp" parameter="dispatch" unknown="false" validate="false">
<forward name="send" path="/login.do" redirect="false"/>
</action>
이것을 달성 할 수있는 방법이 있습니까? 아니면 두 형태가 동일해야합니까?
우리가 시도한 해결 방법은 요청을 통해 물건을 전달하는 것이었지만 크고 지저분해질 수 있습니다.
해결책
이를 달성하는 방법은 두 작업 모두에 동일한 액션 형식을 사용하는 것입니다. 두 가지 다른 액션 폼이 필요한 특정 이유가 있습니까? 두 번째 액션 매핑을 name = "forma"로 수정하고 formb보다는 forma를 사용하기위한 동작 자체를 수정하지 않으면됩니다.
다른 팁
Tom, 솔루션을 사용하고 결합합니다 ActionRedirect, Vincent Ramdhanie의 제안, 나도 당신이 원하는 것을 얻었습니다.
코드는 간단하며 각 동작에 대해 분리 된 양식을 가질 수 있습니다.
ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));
이것은 내 하루를 구하고 JSP에서 직접 변경하려는 노력을 기울이지 않도록 도와줍니다.
이것은 지저분해질 수있는 것처럼 들립니다. 나는 이것을 간단하게 유지하고 ActionForm
저장하기 위해서만 Request
데이터.
public class FormA extends ActionForm {
public int intA;
public int commonInt;
}
일단 Request
제출되었습니다 ActionForm
그리고 이런 종류의 정보를 유지하기 위해 세션 내에서 직접 또는 직접 또는 데이터 홀더로 세션에 넣습니다.
public class ActionTo extends DispatchableAction {
public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) {
FormA form = (FormA)form;
DataHolder dataHolder = request.getSession().getAttribute("dataHolder");
dataHolder.setCommonInt(commonInt);
dataHolder.setIntA(intA);
return mapping.findForward("send");
}
}
이상적으로는 Struts 1에 크게 투자하지 않았다면 Struts 2를 살펴 보겠습니다.