Struts2 redirecionamento para a mesma página

Pessoal,

Comecei a usar o Struts2 e estou com um probleminha. Eu criei uma página de cadastro e, após dar submit, gostaria que voltasse para a mesma página, mas não estou conseguindo, dá erro.

Segue o meu código:

Esta é a minha página JSP:

<s:form action="cadastraProcesso">

<s:textfield required="true" label="Descrição" type="text" name="procDesc" />
<s:textfield required="true" label="Número" type="text" name="nrProc" />
<s:select list="clientes" label="Cliente" listKey="codigo" listValue="razaoSocial" name="idCli"/> 

<s:select list="frs" label="Fórum" listKey="codigo" listValue="nome" name="idFr"  value=""/> 
<s:select list="tcos" label="Tipo de Cobrança" listKey="codigo" listValue="descricao" name="idTco"/> 
<s:select list="tcas" label="Tipo de Causa" listKey="codigo" listValue="descricao" name="idTca"/> 

<s:textfield required="true" label="Data de Abertura" type="text" name="dtAbre" />
<s:textfield required="false" label="Data de Fechamento" type="text" name="dtFecha" />
<s:textfield required="true" label="Taxa Contratual" type="text" name="txContra" />

<s:select list="advs" label="Advogado" listKey="codigo" listValue="nome" name="idAdv"/> 
<s:textfield required="true" label="Data de Participação" type="text" name="dtPart" />

<s:submit value="cadastra" />
<s:reset value="limpa"/>
</s:form>

Essa é a minha action:


public class CadastraProcesso extends ActionSupport {

	private static final long serialVersionUID = 1L;

	private List<Advogado> advs;
	private List<Cliente> clientes;
	private List<Forum> frs;
	private List<TipoCobranca> tcos;
	private List<TipoCausa> tcas;
	
	private String procDesc;
	private Integer nrProc;
	private Integer idCli;
	private Integer idFr;
	private Integer idTco;
	private Integer idTca;
	private Integer[] idAdv;
	private Date[] dtPart;
	private Date dtAbre;
	private Date dtFecha;
	private Double txContra;
	
	

	@Action(value="cadProcessoSetup", 
			results={
			@Result (name="ok", location="/cadProcesso.jsp"),
			@Result(name="erro", location="/erro.jsp")
	})
	public String setup() {
		clientes = ClienteBO.getInstance().consultarClientes();
		advs = AdvogadoBO.getInstance().consultarAdvogados();
		frs = ForumBO.getInstance().consultarForuns();
		tcos = TipoCobrancaBO.getInstance().consultarTiposCobranca();
		tcas = TipoCausaBO.getInstance().consultarTiposCausa();
		return "ok";		
	}
	
	@Action(value="cadastraProcesso", 
			results={
			
				@Result(name="ok", location="/cadastro.jsp"),
				@Result(name="erro", location="/erro.jsp")
	})
	public String cadastra() {
		Cliente cl = new Cliente();
		cl.setCodigo(idCli);
		
		Forum fr = new Forum();
		fr.setCodigo(idFr);
		
		TipoCobranca tc = new TipoCobranca();
		tc.setCodigo(idTco);
		
		TipoCausa tca = new TipoCausa();
		tca.setCodigo(idTca);
		
		Processo proc = new Processo();
		proc.setNumero(nrProc);
		proc.setDescricao(procDesc);
		proc.setDataAbertura(dtAbre);
		proc.setDataFechamento(dtFecha);
		proc.setTaxaContratacao(txContra);
		proc.setForum(fr);
		proc.setCliente(cl);
		proc.setTipoCausa(tca);
		proc.setTipoCobranca(tc);
		
		ProcessoBO.getInstance().cadastrarProcesso(proc);
		return "ok";		
	}
//getters and setters

O cadProcessoSetup popula os combos da minha JSP, e o cadastraProcesso, recupera esses elementos e persiste em um banco de dados Oracle.
Ele está gravando tudo certinho, só que após o submit não estou sabendo como fazer para voltar para a mesma página, caso o usuário queira efetuar um novo cadastro.

Obrigado!

E o erro?
Qual erro?
Quando acontece?
Debugou para saber em que linha?

Para ficar mais claro…

Quando eu quero abrir a página de cadastro eu digito:

http://localhost:8080/projeto/cadProcessoSetup

que está referenciando essa action:

@Action(value="cadProcessoSetup", 
			results={
			@Result (name="ok", location="/cadProcesso.jsp"),
			@Result(name="erro", location="/erro.jsp")
	})
	public String setup() {
		clientes = ClienteBO.getInstance().consultarClientes();
		advs = AdvogadoBO.getInstance().consultarAdvogados();
		frs = ForumBO.getInstance().consultarForuns();
		tcos = TipoCobrancaBO.getInstance().consultarTiposCobranca();
		tcas = TipoCausaBO.getInstance().consultarTiposCausa();
		return "ok";		
	}

O erro parou de ocorrer quando redirecionei para outra página qualquer.

Eu gostaria, que após dar o submit, retornasse para a página de cadastro. Para isso eu devo chamar essa action ou a página jsp?

Essa é a minha dúvida.

Obrigado!

A minha dúvida é, qual o erro?

drsmachado,

A questão é: de nada vai adiantar eu te falar o erro, sendo que eu não tenho certeza de que estou executando o procedimento correto.

O que eu quero saber como eu faço pra redirecionar para a minha página de cadastro, após efetuar a persistência no banco (que está ocorrendo perfeitamente).
Sendo que pra essa página jsp eu criei um método na action para popular os combos.
Se eu redireciono diretamente pra ela (procedimento que eu acredito estar errado, pois acho q tenho que passar pela action, para popular os combos), dá esse erro aqui:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: tag ‘select’, field ‘list’, name ‘idCli’: The requested list key ‘clientes’ could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:548)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:471)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:157)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
root cause

tag ‘select’, field ‘list’, name ‘idCli’: The requested list key ‘clientes’ could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
org.apache.struts2.components.Component.fieldError(Component.java:237)
org.apache.struts2.components.Component.findValue(Component.java:358)
org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:80)
org.apache.struts2.components.Select.evaluateExtraParams(Select.java:105)
org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:856)
org.apache.struts2.components.UIBean.end(UIBean.java:510)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.cadProcesso_jsp._jspx_meth_s_005fselect_005f0(cadProcesso_jsp.java:265)
org.apache.jsp.cadProcesso_jsp._jspx_meth_s_005fform_005f0(cadProcesso_jsp.java:133)
org.apache.jsp.cadProcesso_jsp._jspService(cadProcesso_jsp.java:88)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:157)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

Esta é a sintaxe de redirect para jsp, com annotation, no struts2

@Action(value="minhaAcao", results= {
@Result(name="ok", type="redirect", location="/pagina.jsp")
})
public String execute() { ... }

[quote=ederdiablo]drsmachado,

A questão é: de nada vai adiantar eu te falar o erro, sendo que eu não tenho certeza de que estou executando o procedimento correto.

O que eu quero saber como eu faço pra redirecionar para a minha página de cadastro, após efetuar a persistência no banco (que está ocorrendo perfeitamente).
Sendo que pra essa página jsp eu criei um método na action para popular os combos.
Se eu redireciono diretamente pra ela (procedimento que eu acredito estar errado, pois acho q tenho que passar pela action, para popular os combos), dá esse erro aqui:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: tag ‘select’, field ‘list’, name ‘idCli’: The requested list key ‘clientes’ could not be resolved as a collection/array/map/enumeration/iterator type.
[/quote]

ederdiablo:

Esse erro ocorre porque não existe uma lista para que os combos da página JSP acessem.
você deve redirecionar primeiro para a Action que prepara as listas para a JSP, no caso a
“cadProcessoSetup”

A sintaxe seria a seguinte:

@Action(value="cadastraProcesso", results= {   
@Result(name="ok", type="redirectAction", params={"actionName", "cadProcessoSetup"})   
})   
public String execute() { ... }   

cinetic,

Eu tentei a sugestão do drsmachado e não funcionou. Esse esquema que vc passou, eu já havia tentado, mas acho que pelo fato dos métodos estarem na mesma action, não estava dando certo.
Resolvi da seguinte forma:

@Action(value="cadProcessoSetup",   
            results={  
            @Result (name="ok", location="/cadProcesso.jsp"),  
            @Result(name="erro", location="/erro.jsp")  
    })  
    public String setup() {  
        clientes = ClienteBO.getInstance().consultarClientes();  
        advs = AdvogadoBO.getInstance().consultarAdvogados();  
        frs = ForumBO.getInstance().consultarForuns();  
        tcos = TipoCobrancaBO.getInstance().consultarTiposCobranca();  
        tcas = TipoCausaBO.getInstance().consultarTiposCausa();  
        return "ok";          
    }  
      
    @Action(value="cadastraProcesso",   
            results={  
              
                @Result(name="ok", location="/cadastro.jsp"),  
                @Result(name="erro", location="/erro.jsp")  
    })  
    public String cadastra() {  
        Cliente cl = new Cliente();  
        cl.setCodigo(idCli);  
          
        Forum fr = new Forum();  
        fr.setCodigo(idFr);  
          
        TipoCobranca tc = new TipoCobranca();  
        tc.setCodigo(idTco);  
          
        TipoCausa tca = new TipoCausa();  
        tca.setCodigo(idTca);  
          
        Processo proc = new Processo();  
        proc.setNumero(nrProc);  
        proc.setDescricao(procDesc);  
        proc.setDataAbertura(dtAbre);  
        proc.setDataFechamento(dtFecha);  
        proc.setTaxaContratacao(txContra);  
        proc.setForum(fr);  
        proc.setCliente(cl);  
        proc.setTipoCausa(tca);  
        proc.setTipoCobranca(tc);  
          
        ProcessoBO.getInstance().cadastrarProcesso(proc);  
        return setup(); 

Perceba que aqui no final, ao invés de usar o return “ok” eu coloquei um return para o meu método que popula os combos da minha jsp. Só que tem um problema, ele retorna para a minha jsp, mas com todos os valores preenchidos, eu gostaria que os valores ficassem em branco.

Valeu!