Java Struts 1: Avance d'une action à l'action. Transmettre des données par ActionForms

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

  •  21-08-2019
  •  | 
  •  

Question

Nous avons essayé de rediriger d'une action à une autre, dans l'espoir que les données seraient transmises entre correspondants haricots ActionForm. La première action reçoit une demande du navigateur, imprime un champ de données, et le transmet à une autre action, qui imprime le même champ et redirige vers une page JSP.

Le problème est que est l'impression d'une ActionTo valeur incorrecte -. Son a une valeur commonInt par défaut de 0, alors que nous nous attendons à 35

Voici un exemple représentant:

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

Et ActionForms sont:

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

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

Mappages:

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

Est-il possible d'y arriver? Ou les deux formes doivent être les mêmes?

La solution que nous avons essayé était de passer les choses par la demande, mais il peut faire grand désordre.

Était-ce utile?

La solution

La façon d'y arriver est d'utiliser la même ActionForm pour les deux actions. Y at-il une raison particulière pour laquelle vous avez besoin de deux ActionForms différents? Si essayez de ne pas modifier le second mappage d'action pour name = « Forma » et l'action elle-même à utiliser FormA plutôt que FormB.

Autres conseils

Tom, vous en utilisant la solution et en combinant avec ActionRedirect , suggérée par Vincent Ramdhanie, je suis ce que tu voulais aussi.

Le code est aussi simple que cela et il vous permettra d'avoir séparés les formulaires pour chaque action.

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

endend jusqu'à sauver ma journée et me aider ne pas avoir l'effort de changer cela directement dans la JSP, ce serait terrible.

Sons comme cela pourrait être gênant, je garderais ce simple et utiliser les données uniquement pour stocker ActionForm Request.

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

Une fois que l'a été soumis <=> prendre les données de la farcir et <=> dans la session quelque part, soit directement, soit dans un support de données dans la session pour maintenir ce genre d'information.

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

Idéalement, si vous n'êtes pas investi lourdement dans Struts 1 je voudrais jeter un oeil à Struts 2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top