Arquivo da categoria ‘Java’

Criando um forward dinâmico no Struts

Olás,

Já tentou alguma vez redirecionar uma Action de Struts pra uma URL formada dinâmicamente? Por exemplo, ao final da ação você quer redirecionar para pagina.jsp?id={0} . Com o Struts, todos os redimensionamentos são feitos através do struts-config.xml e você não consegue colocar variáveis nesses mapeamentos!

A solução pra isso é criar um forward em tempo de execução. A classe abaixo faz todo esse processo:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.struts.action.ActionForward;

public class ActionParameterForward {

private Map params=new HashMap();

@SuppressWarnings(“unchecked”)
public ActionParameterForward add(String paramName,String paramValue){
params.put(paramName,paramValue);
return this;
}

public ActionForward forward(ActionForward forward, boolean redirect){
StringBuffer path=new StringBuffer(forward.getPath());
Iterator iter=params.entrySet().iterator();

if(iter.hasNext()){
Map.Entry entry=(Map.Entry)iter.next();
path.append(“?”+entry.getKey()+”=”+entry.getValue());

while(iter.hasNext()){
entry=(Map.Entry)iter.next();
path.append(“&”+entry.getKey()+”=”+entry.getValue());
}
}

ActionForward af = new ActionForward(path.toString());
af.setRedirect(redirect);
return af;
}

}

E basta fazer no retorno da sua Struts Action:


return new ActionParameterForward()
.add(“variavel1″,”valor1″)
.add(“variavel2″,”valor2″)
.forward(mapping.findForward(“forward_dinamico”), true);

Ou seja, supondo que forward_dinamico seja:
<forward name=”forward_dinamico” path=”/WEB-INF/JSP/arquivo.jsp” redirect=”false” />

Ele vai gerar a seguinte URL: arquivo.jsp?variavel1=valor1&variavel2=valor2 e realizar o forward para essa URL recém-criada!

Você consegue até definir a flag “redirect” do mapeamento!

Com isso, conseguimos criar forwards dinâmicos no Struts! ;)

Mais informações sobre Struts, você encontra em: http://struts.apache.org/

[]’s