Struts 2 - Mapeamento de mais de um método na mesma action

14 respostas
antoniopopete

Como faço para mapear outros métodos de uma action?E como invoco a URL deles?

14 Respostas

andersondamasio

faz assim

nomedaaction!nomedometodo.action

antoniopopete

Tem como mostrar um exemplo de configuração do struts.xml?E a chamada dessa url?

edysnipes

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.

andersondamasio

deixar a propriedade struts.enable.DynamicMethodInvocation abilitada

antoniopopete

edysnipes:
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?

antoniopopete

Usando spring, como ficaria essa configuração?

T

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>
antoniopopete

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;
	}
T

hum… não costumo trabalhar com anotações no struts2…

antoniopopete

Vou testar colocando o result no struts.xml e posto um comentário…

antoniopopete
Erro persiste de recurso não encontrado...
<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" >
antoniopopete
Bastante complicado configurar esse struts 2, para fazer uma tarefa simples. Usando spring 2 + struts 2 e nada funcionou até agora...
<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>
Isso dessa forma, eu chamaria http://localhost:8080/cadastroMapas/list e http://localhost:8080/cadastroMapas/saveTree

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?

T

como está seu POST no s:form ?

antoniopopete

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.

Criado 9 de maio de 2008
Ultima resposta 12 de mai. de 2008
Respostas 14
Participantes 4