Struts Java 1: Atacante da ação para a ação. Passando dados através ActionForms

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Estamos tentando redirecionar a partir de uma ação para outra, na esperança de que os dados seriam passados ??entre correspondentes feijão ActionForm. A primeira ação recebe uma solicitação do navegador, imprime um campo de dados e encaminha para outra ação, que imprime o mesmo campo e redireciona para um JSP.

O problema é que ActionTo está imprimindo um valor incorreto -. Sua commonInt tem um valor padrão de 0, enquanto esperamos 35

Aqui está um exemplo que representa:

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 são:

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

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

mapeamentos:

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

Existe uma maneira de conseguir isso? Ou ambas as formas devem ser os mesmos?

A solução que tentamos foi para passar as coisas através de solicitação, mas ele pode ficar grande e confuso.

Foi útil?

Solução

A maneira de fazer isso é usar o mesmo ActionForm para ambas as ações. Existe uma razão específica para que você precisa de duas ActionForms diferentes? Se não tentar modificar o segundo mapeamento ação para name = "forma" e da própria ação para usar FormA em vez de FormB.

Outras dicas

Tom, usando você solução e combinando com ActionRedirect , sugerido por Vincent Ramdhanie, eu tenho o que você queria também.

O código é simples como isso e permitir que você se separaram formulários para cada acção.

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

Esta endend salvando meu dia e me ajudando a não ter o esforço de mudança que diretamente na JSP, o que seria terrível.

Parece que isso poderia ficar confuso, eu manter este simples e usar o ActionForm apenas para armazenar dados Request.

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

Uma vez que o Request foi submetido pegar os dados fora do ActionForm e enchê-lo em algum lugar da sessão, diretamente, ou em um suporte de dados dentro da sessão de manter este tipo de informação.

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

O ideal é que se você não está investido fortemente em Struts 1 eu dar uma olhada em Struts 2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top