Java Struts 1: avanti dall'azione all'azione. Passando dati attraverso ActionForms

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

  •  21-08-2019
  •  | 
  •  

Domanda

Abbiamo cercato di reindirizzare da un'azione all'altra, sperando che i dati sarebbero passati tra corrispondenti ActionForm fagioli. La prima azione riceve una richiesta dal browser, stampa un campo di dati, e l'inoltra a un'altra azione, che stampa lo stesso campo e reindirizza ad una JSP.

Il problema è che è la stampa ActionTo un valore non corretto -. La sua commonInt ha un valore predefinito di 0, mentre ci aspettiamo che 35

Ecco un esempio che rappresenta:

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

E ActionForms sono:

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

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

Mapping:

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

C'è un modo per ottenere questo risultato? O entrambe le forme dovrebbero essere gli stessi?

La soluzione che abbiamo provato era di passare attraverso le cose richiesta, ma si può ottenere grande e disordinato.

È stato utile?

Soluzione

Il modo per farlo è quello di utilizzare lo stesso ActionForm per entrambe le azioni. C'è una ragione specifica per cui avete bisogno di due ActionForms differenti? Se non provare modificare la seconda mappatura azione per name = "forma" e l'azione stessa di usare FormA piuttosto che FormB.

Altri suggerimenti

Tom, usando la soluzione e la combinazione con ActionRedirect , suggerito da Vincent Ramdhanie, ho ottenuto quello che volevi troppo.

Il codice è semplice come sembra e ti permettono di avere forme separate per ogni azione.

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

Questa endend per salvare il mio giorno e mi aiuta a non avere lo sforzo di cambiare che direttamente in JSP, quello che sarebbe stato terribile.

Sembra che questo potrebbe essere un casino, mi piacerebbe mantenere questo semplice e utilizzare il solo per memorizzare i dati ActionForm Request.

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

Una volta che il <=> è stata presentata prendere i dati fuori dal <=> e roba nella sessione da qualche parte, direttamente o in un supporto di dati all'interno della sessione di mantenere questo tipo di informazioni.

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

In teoria, se non si è pesantemente investito in Struts 1 Mi piacerebbe dare un'occhiata a Struts 2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top