Re:Struts - enviar parametro para a action

4 respostas
jjose

?
Olhe sobre dispatcher ou lookupdispatcher(ação no botao)…

Se vc colocar um valor estatico no xml, quando vai ser alterado?
Ja pensou em hidden ?

Quantas soluções para ñ criar outra classe?
Qual a melhor p/ o negocio?

4 Respostas

Java_Player

Não seria mais fácil criar uma Action só??

E no JSP colocar algo como:

ver mensagens públicas
ver mensagens privadas

Luiz_Rocha

Saudações.

Preciso passar um parâmtero para um objeto de uma subclasse de Action que eu criei no meu projeto. Quero simplesmente passar uma dupla “nome-valor”, um par de Strings. Mas o parametro precisa ser enviado do struts-config.xml

A razão é a seguinte: na minha aplicacao eu tenho dois links que chamam uma action cada: o link “ver mensagens públicas” e o link “ver mensagens privadas”. As actions - de nomes semelhantes - chamam a mesma classe, a GetMensagensAction, que extende de Action. A diferença é que um link manda um atributo chamado “destinatario” com o valor “todos” e a outra manda o mesmo atributo, mas com o valor “usuario”. Na classe existe um mecanismo que direciona o algoritmo para determinado caminho segundo o valor do atributo “destinatario”.

Minha primeira solução foi colocar um <set-property (…) /> dentro do <action (…) > no struts-config.
Estava assim:

<action path="/verMensagensPublicas"
                type="com.gmail.homemletra.GetMensagensAction">
                    <set-property  name="destino" value="todos"/> 
                    <forward name="adiante" path="MensagensPublicas"/>
        </action>

Mas o Tomcat denunciava um NullPointerException, e agora eu acho que não deve ser usado dentro de um .

Existe alguma maneira de enviar um parâmetro para essa classe através do do struts-config? Se não, como eu faria, já que eu quero evitar ter de construir duas classes para fazer operações tão semelhantes?

Valeu.

Luiz_Rocha

Ola.

O conteúdo estátio do xml é estático mesmo, não deve mudar em momento algum.
A situação é que eu tenho dois links para páginas diferentes geradas com a ajuda do processamento de uma mesma classe. Ela deve receber algum valor para saber se foi instanciada por um link ou por outro.

Minha idéis inicial era justamente fazer isso no struts-config:

<action path="/verMensagensPublicas"
                type="com.gmail.homemletra.GetMensagensAction">
                    <set-property  name="destino" value="todos"/>
                    <forward name="adiante" path="MensagensPublicas"/>
        </action>

        <action path="/verMensagensPrivadas"
                type="com.gmail.homemletra.GetMensagensAction">
                    <set-property  name="destino" value="usuario"/>
                    <forward name="adiante" path="MensagensPublicas"/>
        </action>

Na classe GetMensagensAction eu colocaria:

String destino = request.getParameter("destino");
         if(destino.equals("usuario")){
             destino = (String) request.getSession(false).getAttribute("nomeUsuario");
         }

Ou seja, se o valor do parametro destino for “todos”, contionuará assim; mas se for “usuario”, a classe pega o nome do usuário do HttpSession. O resto da lógica é só a utilização desses nomes.

Meu problema é que não posso colocar num , e daí não sei como enviar um parâmetro para a minha classe.

Mas, agora que você falou, DispatchAction parece ser bem mais plausível.
Valeu.

Luiz_Rocha

Ei, java palyer. Sua solução é bem mais simples.
Obrigado.

Criado 17 de outubro de 2007
Ultima resposta 17 de out. de 2007
Respostas 4
Participantes 3