Como faço para mapear outros métodos de uma action?E como invoco a URL deles?
Struts 2 - Mapeamento de mais de um método na mesma action
14 Respostas
faz assim
nomedaaction!nomedometodo.action
Tem como mostrar um exemplo de configuração do struts.xml?E a chamada dessa url?
Boa noite.
Cara se entendi bem a dúvida, vc pode fazer assim:
// no struts.xml
<action name="usuarioAction!*" method="{1}" class="pmb.secinfor.action.UsuarioAction">
aí digamos que a classe UsuarioAction tem dois métodos: inserirUsuario e deletarUsuario.
poderá fazer assim nas JSPs:
form action="usuarioAction!inserirUsuairo.action"
form action="usuarioAction!deletarUsuario.action"
Bem é isso.
Abraço.
deixar a propriedade struts.enable.DynamicMethodInvocation abilitada
form action="usuarioAction!inserirUsuairo.action"
form action="usuarioAction!deletarUsuario.action" Mas quando você define {1} não quer dizer o primeiro método da action?
Usando spring, como ficaria essa configuração?
ou assim tb…
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="true" />
<package name="person" extends="struts-default">
<action name="list" method="execute" class="personAction">
<result>pages/list.jsp</result>
<result name="input">pages/list.jsp</result>
</action>
<action name="remove" class="personAction" method="remove">
<result>pages/list.jsp</result>
<result name="input">pages/list.jsp</result>
</action>
<action name="save" class="personAction" method="save">
<result>pages/list.jsp</result>
<result name="input">pages/list.jsp</result>
</action>
</package>
</struts>
Estou definindo os result sob a forma de anotações.
Vou postar meu código:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="cadastroMapas" class="br.ucsal.projeto.view.actions.CadastroMapasAction" scope="prototype">
<property name="instituicaoService">
<ref bean="instituicaoService" />
</property>
</bean>
</beans>
<struts>
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-defaults" namespace="/">
<action name="cadastroMapas!*" class="cadastroMapas" method="{1}"/>
</package>
</struts>
@Result(name = Action.SUCCESS, value = PathsAction.CADASTRO_MAPAS)
public class CadastroMapasAction extends ActionSupport implements Preparable {
private Collection<InstituicaoModel> instituicoes;
private InstituicaoService instituicaoService;
private Collection<CursoModel> cursos;
private Long idInstituicao;
private Long idCurso;
private String treeString;
public String preencheCurso() {
return Action.SUCCESS;
}
public void prepare() throws Exception {
this.instituicoes = this.instituicaoService.findAll();
}
@Override
public String execute() {
return Action.SUCCESS;
}
public String montaEstruturaDiretorios(){
treeString = TreeUtil.formatTreeString(treeString);
Collection<NodeModel> nodes = TreeUtil.findAllNodes(treeString);
return Action.SUCCESS;
}
hum… não costumo trabalhar com anotações no struts2…
Vou testar colocando o result no struts.xml e posto um comentário…
<package name="default" extends="struts-defaults" namespace="/">
<action name="cadastroMapasList" class="cadastroMapasAction" method="execute">
<result>
/WEB-INF/pages/cadastroMapas.jsp
</result>
</action>
<action name="cadastroMapasSaveTree" class="cadastroMapasAction" method="saveTree">
<result>
/WEB-INF/pages/cadastroMapas.jsp
</result>
</action>
</package>
<bean id="cadastroMapasAction" class="br.ucsal.projeto.view.actions.CadastroMapasAction" scope="prototype">
<property name="instituicaoService">
<ref bean="instituicaoService" />
</property>
</bean>
<bean id="cadastroMapasAction" class="br.ucsal.projeto.view.actions.CadastroMapasAction" scope="prototype">
<property name="instituicaoService">
<ref bean="instituicaoService" />
</property>
</bean>
function submitTree(){
document.cadastroMapas.action = "/projeto/cadastroMapasSaveTree.action";
document.cadastroMapas.submit();
}
<s:form id="cadastroMapas" action="cadastroMapasList" method="post" >
<package name="default" extends="struts-defaults" namespace="/cadastroMapas">
<action name="list" class="cadastroMapasAction" method="execute">
<result name="success">
/pages/cadastroMapas.jsp
</result>
</action>
<action name="saveTree" class="cadastroMapasAction" method="saveTree">
<result name="success">
/pages/cadastroMapas.jsp
</result>
</action>
</package>
Existe esses dois métodos na action e não sei porque o struts não consegue localiza-los.
Alguém já passou por isso?
como está seu POST no s:form ?
Meu post?
<s:form id="cadastroMapas" action="cadastroMapas" method="post" >
Ja resolvi, vou usar um metodo so…
A tarefa eh pequena da para usar um metodo so…mais pratico.