Struts 2 : result input

Problema usando o struts2.

Estou em uma pagina, e ao clicar no submit dela; eu esperava que fosse chamado um método no meu Action (coloquei um breakpoint na 1ª linha).
Mas isto não acontece.

No console, dá esse erro aqui:
16:35:30,578 ERROR [Dispatcher] Could not find action or result
No result defined for action br.com.ctbc.netsitebackup.controller.action.PlanAction and result input - action - file:/C:/DEVELOP/JAVA/containers/jboss-4.2.2/server/default/tmp/deploy/tmp52422netbackup-portal-exp.war/WEB-INF/classes/struts.xml:20:126

Mas o problema é que eu estive lendo em um livro, que esse result input serve pra quando acontece erro de validação. E eu não estou usando validação ! Então porque ele estaria requerindo este result input ? Somente declarei o result “success” e o “error”. Mesmo se eu insiro um result input no struts.xml; ele muda o erro, mas aí continua não passando pelo meu método no Action (ele tenta carregar a pagina, mas logicamente nao vai carregar pois alguns campos lá nao foram carregados no Action).

Resumindo, preciso descobrir onde é o começo do problema ( o que está causando a chamada ao result input mesmo não havendo validação no projeto ).




Disponibilizo aqui, a parte relevante do arquivo de configuração do struts, do Action, e das paginas; para verem que não é problema relativo à erros de associação do controller:

struts.xml:

[code] <action name=“purchasePlanStep1” method=“purchasePlanStep1” class=“br.com.ctbc.netsitebackup.controller.action.PlanAction”>
<result name=“success”>/pages/test/purchasePlanStep1.jsp</result>
<result name=“error”>/pages/error/error.jsp</result>
</action>

	&lt;action name="purchasePlanStep2" method="purchasePlanStep2" class="br.com.ctbc.netsitebackup.controller.action.PlanAction"&gt;
		&lt;result name="success"&gt;/pages/test/purchasePlanStep2.jsp&lt;/result&gt;
		&lt;result name="error"&gt;/pages/error/error.jsp&lt;/result&gt;
	&lt;/action&gt;[/code]

PlanAction.java (:

[code]package br.com.ctbc.netsitebackup.controller.action;

public class PlanAction extends ActionSupport implements Preparable,
ModelDriven<PlanoTO> {

/**
*
* Action chamado no passo inicial de obtenção de novo plano
*
* @return
*/
public String purchasePlanStep1() {

    /* enviando informações dos tipos de pacotes (segmentos) */
    segmentos = new ArrayList&lt;String&gt;();
    SEGMENTO[] segmentosArray = SEGMENTO.values();
    for (int i = 0; i &lt segmentosArray.length; i++) {
        segmentos.add(segmentosArray[i].toString());
    }

    return SUCCESS;

}

/**
 * Action chamado no segundo passo de obtenção de novo plano: entre a tela
 * que terá o tipo de pacote escolhido e a tela que irá definir a capacidade
 * do plano
 * 
 * @return
 */
public String purchasePlanStep2() {

    SEGMENTO segmentoEscolhido = planoTO.getSegmento();

    if (segmentoEscolhido.equals(SEGMENTO.Residencial)) {
        capacidades = netBackupService.listCapacitiesResidencial();
    } else { // segmentoEscolhido.equals(SEGMENTO.Empresarial)
        capacidades = netBackupService.listCapacitiesEmpresarial();
    }

    return SUCCESS;
}[/code]

purchasePlanStep1.jsp:

purchasePlanStep2.jsp:

[code]<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>
<title>Cadastro - Passo 2</title>
</head>

<body>

<s:form action="purchasePlanStep3">

&lt;s:radio label=&quot;Capacidade&quot; name=&quot;capacidade&quot; list=&quot;capacidades&quot;/&gt;
&lt;s:submit /&gt;

</s:form>
</body>
</html>[/code]

Faça <s:submit method="nomedometodo" />. Ele deve estar indo para algum método default de superclasse (se é que tem) e o retorno dele é INPUT.

Hunf. Não adiantou … Acontece o mesmo erro.
[color=red]MAS[/color] dessa maneira que você me falou, aparece uma linha intrigante no log (que nao aparecia anteriormente):

17:38:54,859 INFO [ActionValidatorManagerFactory] Detected AnnotationActionValidatorManager, initializing it…

Vou procurar porque ele detectou esta porcaria aí.
Se alguem souber; por favor já mata a parada pra mim 8)

Tem certeza que não tá usando nada de validação? Pela mensagem parece que sim.

Que nada. Por enquanto só eu que mechi na parte controller do projeto e posso garantir que não configurei nada de validação.

Uma coisa estranha. Olhando o javadoc das classes ActionValidatorManagerFactory aqui , e da AnnotationActionValidatorManager aqui ( as que aparecem no log ) não há nenhuma classe que as extende ( o que seria uma lógica pra ela estar sendo inicializada como é informado no log).
Então não faço ideia de quem ou o que e onde isto está sendo chamado/inicializado :shock:

Achei alguem com o mesmo problema que eu (sem solução) :frowning:
http://www.guj.com.br/posts/list/0/84369.java

PS: Tambem não é problema de definição do método purchasePlanStep3 no PlanAction (chamado na purchasePlanStep2.jsp) pois ele já está lá.
Na verdade, para testar removí tudo da purchasePlanStep2.jsp e deixei só um “

Viva !

” lá .

Encontrei o problema !

O radio button ‘segmento’ em purchasePlanStep1.jsp ; é um enum no meu Action ; que continha os valores Residencial e Empresarial. Mas não sei porque, na volta pro Action, o controller não conseguiu atribuir o valor selecionado na pagina para o Action.

Creio que eu deveria ter mandado a lista de segmentos pra página de outra forma; pois pra usá-lo na tag s:radio ; não me lembro pq (amanhã edito e coloco) mas eu tive que transformar o List em List.

Enfim, mudei minha implementação (troquei meu uso do enum por String).
[size=30]Massss[/size] ainda assim gostaria de saber como que eu faço pra trabalhar com enum nesse caso ( o envio da lista de opçãoes e o retorno do selecionado pro Action sem erro :lol: . )