Struct 2 - apresenta erro There is no Action mapped for namespace / and action name
3 respostas
R
romulor2
Estou começando no Java e decidi estudar o struct 2 Anotation, então ai vai a estrutura que estou tentando montar:
uma javabeans “usuario” na BEL;
uma classe “usuario” na DAO com persistência via hibernate;
um frontend em JPS com um formulário HTML com Jquery que executa a action incluiUsuario;
uma classe incluiUsuario na BLL.usuario que incluirá via DAO o usuário;
Bem meu problema é que fiz a classe incluiUsuario com os anotations ?Action? certinho e o form com a action apontando para incluiUsuario, mas ao apertar o botão aparece o erro: There is no Action mapped for namespace / and action name incluirUsuario
Aqui a classe Action
Aqui o form
Além do problema, ainda tenho uma dúvida:
Da forma como estou estruturando o sistema, terei uma classe para cada ?Action?, mas gostaria muito de ter uma classe para todas as ações relacionadas ao usuário.
Você tentou usar “convenção sobre configuração” que o Struts 2.x ofereçe. Eu gosto muito desssa idéia, pois aumenta muito a produtividade e deixa o código com fácil manutenção.
Pelos códigos que você postou, parece-me que faltou:
Sua Action deveria estar num pacote “action” ou “xx.yy.zz.action” (ou “actions”)
O nome da Action deve começar ocm letra maiúscula (regra geral, aliás)
Vocẽ incluiu o “jar” do Convention Plugin no seu classpath?
Dica 1: Evite resultados do tipo “ok”. Usando “success” você lança mão do padrão e escreve menos no final. Mas para desfrutar desse benefício plenamente, deve-se estender a ActionSupport em suas Actions (isso dá muitas vantagens, aliás). Assim você ganha a constante SUCCESS, podendo chamá-la via “ctrl+espaço”. O “ok” você pode digitar errado, afinal…
Dica 2: Nem precisava da anotação @Action. Basta sobrestrecer o método execute() que o mapeamento fica conforme o nome da tua classe (contanto que siga o que escrevi no no. 1). Se sua Action for “IncluirUsuario”, sua url será “incluir-usuario”.
Espero ter ajudado.
R
romulor2
Cara fiz o que você disse e funcionou obrigado! Mas precisei colocar no namespace action. herdar a classe ActoinSupport e deixar os anotations, pois se tiro um deles a parada volta a dar o erro. rsrs
Ainda continuo com uma dúvida, pelo que percebi, terei uma classe para cada ação e todas ficarão dentro do mesmo namespace “action”… Isso em um projeto grande com muitas ações não tornará ficará bagunçado, não tem como ter uma classe com várias actions ou pelo menos um namespace para cada grupo de ações?
para que você precisasse de 0 configuração nessa Action, bastaria criar a página WEB-INF/content/incluir-usuario.jsp.
Essa página ficaria mapeada automaticamente para “success”, “error” e “input”. Se quisesse página diferente para os resultados bastaria fazer como no exemplo:
Resultado “error” -> página WEB-INF/content/incluir-usuario-error.jsp. Nesse exemplo, “success” e “input” continuariam para a página anterior.
Quanto a
A configuração de namespaces também segue o “convenção sobre configuração”:
ex:
pacote “romulo.actions” e classe “SalvarPessoa” -> mapeamento “salvar-pessoa” no namespace padrão.
pacote “romulo.actions.pessoa” e classe “Salvar” -> mapeamento “salvar” no namespace “/pessoa”.