Boa tarde, gostaria de saber se no meu action eu consigo recuperar os campos do jsp. sem precisar usar o s:form?
JSP
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts 2 - Example</title>
</head>
<body>
<div>
<table>
<tr>
<td>
<s:form action="moradorConsulta">
<s:textfield label="Nome" name="morador.nome" size="20"></s:textfield>
<s:combobox label="Bloco" name="morador.bloco"
headerValue="--- Selecione o Bloco ---"
headerKey="1" list="{'A','B'}" />
<s:combobox label="Apartamento" name="morador.apartamento"
headerValue="--- Selecione o Apartamento ---"
headerKey="1" list="{'101','102','103','104','105','106','107','108'}" />
<s:submit value="Consultar" notifyTopics="" />
<!-- s:submit type="image" label="Consultar" src="../../images/ok.jpeg"/-->
</s:form>
</td>
</tr>
</table>
<a href="<s:url action='moradorConsulta!clear.action'></s:url>" style="text-decoration:none" target="principal">Clear2</a>
<table border="2">
<tr>
<td style="width: 150px; text-align: center">Name</td>
<td style="width: 150px; text-align: center">Bloco</td>
<td style="width: 150px; text-align: center">Apartamento</td>
<td style="width: 150px; text-align: center">Picture</td>
</tr>
<s:if test="%{listaMoradores != null}">
<s:iterator value="listaMoradores">
<tr>
<td><s:property value="nome" /></td>
<td><s:property value="bloco" /></td>
<td><s:property value="apartamento" /></td>
<td>.<!-- img src="<s:property value="foto" />" width="150" height="70" alt="Achatada" border="0"--></td>
</tr>
</s:iterator>
</s:if>
</table>
</div>
</body>
</html>
Action
package com.stec.scr.actions;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.stec.scr.dao.FactoryDAO;
import com.stec.scr.dao.SessionDAO;
import com.stec.scr.exception.DAOException;
import com.stec.scr.model.morador.Morador;
import com.stec.scr.model.morador.dao.MoradorDAO;
public class MoradorConsultaAction extends ActionSupport {
private static final long serialVersionUID = 402422198448619470L;
private List<Morador> listaMoradores;
private Morador morador;
public String execute() {
FactoryDAO factory = FactoryDAO.getFactory();
SessionDAO session = factory.createSessionDAO();
MoradorDAO moradorDAO = factory.getMoradorDAO(session);
try {
session.beginTrans();
listaMoradores = moradorDAO.pesquisaByNome(morador);
} catch (DAOException e) {
e.printStackTrace();
} finally {
session.close();
}
return "success";
}
public String clear(){
// aqui preciso recuperar o morador
return "success";
}
//Gets e Sets
}
Aqui no metodo “clear” gostaria de recuperar o morador.
No “execute” trabalho normalmente com o morador, isto esta funcionado.
vc tem que passar na url do clear.action?morador.nome=eu
nextuser
Muito obrigado pela resposta, mas acho q eu nao fui claro no que eu queria.
Assim, eu quero fazer um action com varias funções, por exemplo, pesquisar e limpar, dae eu colocaria um submit para ir para a função pesquisa e outro para função clear. no meu jsp eu coloquei um link, mas na verdade nao gostaria de deixar assim. Nos dois casos eu iria precisar usar o “morador” e outros possiveis campos.
Encontrei um modo, não testei ainda, mas acho que vai funcionar.
http://struts.apache.org/2.0.6/docs/home.html
creio que ainda não entendi mas acho que seja isso aki…
vc quer criar varios metodos na mesma classe e cada método é um action diferente!! simples!
quanto vc vai especificar a action no xml vc tem que especificar qual o metodo de sua classe caso contrario ele vai chamar o execute.
<package name="Motorista" extends="struts-default" namespace="/cadastros/motorista">
<action name="search" class="com.layer2.action.cadastros.MotoristaAction" method="search">
<result name="input" type="dispatcher">/cadastros/cadastros/motorista/index.jsp</result>
<result name="success" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="error" type="dispatcher">/cadastros/motorista/index.jsp</result>
<interceptor-ref name="model-driven" />
<interceptor-ref name="validationWorkflowStack" />
</action>
<action name="edit" class="com.layer2.action.cadastros.MotoristaAction" method="edit">
<result name="input" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="success" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="error" type="dispatcher">/cadastros/motorista/index.jsp</result>
<interceptor-ref name="model-driven" />
<interceptor-ref name="validationWorkflowStack" />
</action>
<action name="delete" class="com.layer2.action.cadastros.MotoristaAction" method="delete">
<result name="input" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="success" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="error" type="dispatcher">/cadastros/motorista/index.jsp</result>
<interceptor-ref name="model-driven" />
<interceptor-ref name="validationWorkflowStack" />
</action>
<action name="save" class="com.layer2.action.cadastros.MotoristaAction" method="save">
<result name="input" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="success" type="dispatcher">/cadastros/motorista/index.jsp</result>
<result name="error" type="dispatcher">/cadastros/motorista/index.jsp</result>
<interceptor-ref name="model-driven" />
<interceptor-ref name="validationWorkflowStack" />
</action>
</package>
nextuser, ja consegui fazer, oq eu queria era no form ter 2 botões de submit, cada um indo para um action diferente.
<s:form action="moradorConsulta" method="post">
<s:textfield label="Nome:" name="morador.nome" size="20"></s:textfield>
<s:combobox label="Bloco:" name="morador.bloco"
headerValue="--- Selecione o Bloco ---"
headerKey="1" list="{'A','B'}" />
<s:combobox label="Apartamento:" name="morador.apartamento"
headerValue="--- Selecione o Apartamento ---"
headerKey="1" list="{'101','102','103','104','105','106','107','108'}" />
<s:submit value="Consultar" notifyTopics="" />
<s:submit action="moradorGeral!clear" value="Clear" name="Clear" onclick="form.onsubmit=null"/>
</s:form>
mas nuam foi isso que vc disse no post inicial!!!..
…