[Resolvido] Struts- Mapear JSP como Action

Boa tarde pessoal,

Estou desenvolvendo um sistema web com Struts 2 onde, após o login é chamada uma JSP contendo uma tela com menu. Gostaria que esta página fosse chamada como uma Action (vi um exemplo desses numa apostila da Caleum), mas não sei como fazer. Dei uma pesquisada e cheguei neste código:


	<package name="default" extends="struts-default">

		<action name="MenuPrincipal">
			<result>/WEB-INF/jsp/telas/Principal.jsp</result>
		</action>

Inseri no struts.xml, conforme abaixo, mas a action não é chamada. O struts simplesmente ignora.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>


	<constant name="struts.devMode" value="true"> </constant>
	<constant name="struts.objectFactory" value="spring" />

	<package name="default" extends="struts-default">
	
		<action name="MenuPrincipal">
			<result>/WEB-INF/jsp/telas/Principal.jsp</result>
		</action>
	</package>
	
	

	
</struts>

Se alguém puder ajudar agradeço.

Inté…

Não entendi nada do que você quer.
Eu uso annotations e faço da seguinte forma:

@Namespace("/")
@ParentPackage("struts-default")
public class LoginAction{
   @Action(value="loginAction", results={
   @Result(name=SUCCESS, location="/paginaComMenu.jsp")
   })
   public String login(){
      //faz o que precisa
      return SUCCESS;
   }
}

Blz parceiro.

Pois então… O que eu quero é fazer o que você passou, só que sem necessariamente criar uma classe action só para isso. Segundo a apostila (tentei anexar, mas não teve jeito) tem como se transformar uma jsp em action somente usando configurações no struts.xml. Só que é aquela boa e velha coisa, deveria funcionar, só que não funciona. Já tentei até deixar o struts.xml só com essas configurações, só que não vai de jeito nenhum.

Valeu pela ajuda de qualquer forma.

Inté…

Não é nada disso.
O struts.xml é apenas uma configuração (como o web.xml).
A questão é que, quando você cria

<action name="login">
    <result>login.jsp</result>
</action>

E não define a propriedade class do elemento action, você terá o redirecionamento para a jsp em questão.

Blz

Pois então é bem isso que quero fazer. Acho que o código melhor. Só que realmente não consigo fazer a classe Action chamar a jsp. Eu escrevi a seguinte action:

@Namespace("/login")
public class Login extends ActionSupport{

	private Usuario usuario;

		@Action(value = "logar", results = {
				@Result(name = "ok", location= "MenuPrincipal"),
				@Result(name = "erro", location = "/index.jsp")
		})
	public String login(){
			return "ok";	
	}

		public Usuario getUsuario() {
			return usuario;
		}

		public void setUsuario(Usuario usuario) {
			this.usuario = usuario;
		}
		
	
	
}

O meu struts.xml já está no primeiro post. Não sei o que estou fazendo de errado.

Mais uma vez agradeço a força.

Inté…

Mas aí você está misturando as coisas. Aliás, várias coisas.

  • Se o método login já retorna “ok”, por que não faz com que a location referente a este retorno seja a jsp desejada?
  • Você não pode colocar como location o nome de uma Action. O Struts 2 tratará isto como um redirect e, para tanto, você precisa programar o Result como tal.
@Namespace("/login")  
public class Login extends ActionSupport{  
  
    private Usuario usuario;  
  
        @Action(value = "logar", results = {  
//Veja, eu modifico a forma como o result é configurado
                @Result(name = "ok", type="redirectAction", params={"actionName", "MenuPrincipal"}),  
                @Result(name = "erro", location = "/index.jsp")  
        })  
    public String login(){  
            return "ok";      
    }  
  
        public Usuario getUsuario() {  
            return usuario;  
        }  
  
        public void setUsuario(Usuario usuario) {  
            this.usuario = usuario;  
        }  
          
      
      
} 

Meu amigo, é aquela coisa, quem sabe… realmente sabe. Agora deu certo. Ainda bem que você resolveu dar uma ajuda. Estou começando agora usar o struts a sério, então no meu “grande” conhecimento estava achando que era tudo - não digo “menos isso” porque eu não conhecia o “isso” - , já tinha apagado, mudado e colocado um montão de coisas que não tinham nada a ver.

Valeu mais uma vez pela ajuda.

Obs: Antes de postar eu dei uma limpada boa no código para ficar mais legível. Ali no método do login tem mais o acesso ao banco e validação.

Vlw

Camarada, posso te dizer o seguinte. Meu primeiro contato com o Struts 2 foi na faculdade.
Confesso que, naquela época, eu tive muito mais dificuldades. Tanto que tive que reaprender ano passado.
Mas, é isso. Nada que você não consiga aprender com prática e dedicação.
Quanto ao código, bacana ter limpado ele, deixando apenas o que queria.