Java Struts 1: von Aktion zu Aktion übermittelt. Übergeben von Daten durch Action

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

  •  21-08-2019
  •  | 
  •  

Frage

Wir haben versucht, von einer Aktion zu einem anderen umzuleiten, in der Hoffnung, dass die Daten zwischen dem entsprechenden ActionForm Bohnen weitergegeben würden. Die erste Aktion eine Anfrage von dem Browser, druckt ein Datenfeld, und leitet sie an eine andere Aktion, die das gleiche Feld druckt und leitet zu einer JSP.

Das Problem ist, dass ActionTo einen falschen Wert gedruckt wird -. Seine commonInt einen Standardwert von 0 hat, während wir 35 erwarten

Hier ist ein Beispiel darstellt:

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");
    }
}

Und Action ist:

public class FormA extends ActionForm {
    public int intA;
    public int commonInt;
}

public class FormB extends ActionForm{
    public int intB;
    public int commonInt;
}

Mappings:

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

Gibt es eine Möglichkeit, dies zu erreichen? Oder beide Formen sollten gleich sein?

Die Abhilfe ich versucht war, die Dinge durch Anfrage passieren, aber es kann groß und unübersichtlich wird.

War es hilfreich?

Lösung

Die Art und Weise, dies zu erreichen ist die gleiche Action für beiden Aktionen zu verwenden. Gibt es einen bestimmten Grund, warum man zwei verschiedene Action braucht? Wenn nicht versuchen, die zweite Aktion Zuordnung Namen Modifizieren = „Forma“ und die Handlung selbst FormA zu verwenden, anstatt FormB.

Andere Tipps

Tom, indem Sie Lösung und die Kombination mit ActionRedirect , vorgeschlagen von Vincent Ramdhanie, ich habe, was Sie zu wollen.

Der Code ist so einfach ist das, und es ermöglicht es Ihnen, für jede Aktion getrennt Formulare zu haben.

ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));

Dieses endend bis meinem Tag zu sparen und half mir nicht die Mühe zu haben, dass direkt in der JSP zu ändern, was schrecklich wäre.

Klingt wie diese chaotisch konnte ich diese einfach halten würde und die ActionForm verwenden nur Request Daten zu speichern.

public class FormA extends ActionForm {
    public int intA;
    public int commonInt;
}

Sobald die Request nehmen wurden aus den ActionForm und stopft es in die Sitzung irgendwo die Daten eingereicht werden, entweder direkt oder in einen Datenbehälter in der Sitzung, diese Art von Informationen zu erhalten.

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");
  }
}

Im Idealfall, wenn Sie in Struts 1 investieren nicht stark bist würde ich einen Blick auf Struts 2 nehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top