Java Struts 1 : 행동에서 행동으로의 앞으로. ActionForms를 통해 데이터를 전달합니다

StackOverflow https://stackoverflow.com/questions/849051

  •  21-08-2019
  •  | 
  •  

문제

우리는 데이터가 해당하는 사이에 전달되기를 바라고 한 조치에서 다른 작업으로 리디렉션하려고했습니다. 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를 살펴 보겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top