Bom dia GUJeiros.
Estou o seguinte problema/dúvida.
Estou estudando struts 1(pq é o padrão que a empresa na qual estou utiliza) e estava fazendo alguns testes para entender melhor. Resolvi então estudar as Taglibs do struts e fiz um cadastro simples.
Fiz a Action, ActionForm, DAO, Bean e JSP.
O meu problema, creio eu, esteja no JSP.
Quando realizo o cadastro, todos os dados vão para o banco como nulo, apenas o ID aparece pois é Auto_Increment.
Como não entendo muito de TagLib, creio eu que o problema esteja no meu html:text que está da seguinte forma:
<html:text name="pessoa" property="nome" styleId="nome"/> onde “pessoa” é o nome do meu bean e “nome” é a descrição do atributo e está da mesma forma no meu ActionForm.
Alguém poderia me dar uma luz?
Thanks!.!
Tente assim pra ver se consegue inserir.
<html:text property="pessoa.nome" styleId="nome"/>
Oi santos.fernando, em primeiro lugar obrigada por responder mas, tentei e deu o seguinte erro:
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 23
20: <html:form action="PessoaAction.do" >
21:
22: <bean:message key="nome.mensagem" />
23: <html:text property="pessoa.nome" styleId="nome"/>
24:
25: <bean:message key="logradouro.mensagem" />
26: <html:text name="pessoa" property="logradouro" styleId="logradouro"/>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
javax.servlet.ServletException: javax.servlet.jsp.JspException: No getter method for property: "pessoa.nome" of bean: "Form.PessoaForm"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.index_jsp._jspService(index_jsp.java:102)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
Post aqui seu struts-config.xml
Na tua action tire o .do, deixe apenas PessoaAction
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="PessoaForm" type="Form.PessoaForm"/>
</form-beans>
<global-exceptions>
</global-exceptions>
<global-forwards>
<forward name="welcome" path="/Welcome.do"/>
</global-forwards>
<action-mappings>
<action input="/index.jsp"
name="PessoaForm"
parameter="parameter"
path="/PessoaAction"
scope="request"
type="Action.PessoaAction">
<forward name="add" path="/index.jsp"/>
</action>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<message-resources parameter="com/myapp/struts/ApplicationResource"/>
Paths found in Tiles definitions are relative to the main context.
-->
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
<set-property property="moduleAware" value="true" />
</plug-in>
<!-- ========================= Validator plugin ================================= -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
Prontinhooo
Na action do teu jsp, tire o .do, e deixe apenas PessoaAction.
O cadastro continua ficando em branco no banco.
Eu acho assim, pelo que entendi.
O ActionForm deveria de reconhecer o valor que é passado no <html:text>, porém alguma configuração deve estar errada e o ActionForm não recebe os valores, por esse motivo grava tudo em branco no banco =/
Se for da forma normal
<input type="text" name="nome" id="nome"/> ele vai, mas se for com o <html:text> ele nao reconhece o atributo. O property seria como um id?
Post sua Action e a ActionForm.
O property é a propriedade que irá acessar os campo.
Action
public class PessoaAction extends DispatchAction{
public ActionForward add(ActionMapping mapping,ActionForm form,HttpServletRequest request,
HttpServletResponse response)throws Exception{
PessoaForm pForm = (PessoaForm)form;
PessoaDao pDao = new PessoaDao();
Pessoa bean = new Pessoa();
bean.setNome(pForm.getNome());
bean.setLogradouro(pForm.getLogradouro());
bean.setEmail(pForm.getEmail());
bean.setUsuario(pForm.getUsuario());
bean.setSenha(pForm.getSenha());
pDao.Inclui(bean);
return mapping.findForward("add");
}
}
ActionForm
public class PessoaForm extends ActionForm {
private String nome;
private String logradouro;
private String email;
private String usuario;
private String senha;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLogradouro() {
return logradouro;
}
public void setLogradouro(String logradouro) {
this.logradouro = logradouro;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
}
JSP
[code]
<%@ taglib uri=“http://jakarta.apache.org/struts/tags-bean ” prefix=“bean” %>
<%@ taglib uri=“http://jakarta.apache.org/struts/tags-html ” prefix=“html” %>
<%@ taglib uri=“http://jakarta.apache.org/struts/tags-logic ” prefix=“logic” %>
<jsp:useBean id=“pessoa” scope=“request” class=“Bean.Pessoa” >
</jsp:useBean>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core ” %>
<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd ”>
<html:html>
<body>
<html:form action=“PessoaAction” >
<bean:message key="nome.mensagem" />
<html:text property="nome" styleId="nome" styleClass="inputfield"/>
<bean:message key="logradouro.mensagem" />
<html:text name="pessoa" property="logradouro" styleId="logradouro"/>
<bean:message key="email.mensagem" />
<html:text name="pessoa" property="email" styleId="email"/>
<bean:message key="usuario.mensagem" />
<html:text name="pessoa" property="usuario" styleId="usuario"/>
<bean:message key="senha.mensagem" />
<html:text name="pessoa" property="senha" styleId="senha"/>
<p><html:link href="PessoaAction.do?parameter=add"> Cadastrar </html:link></p>
</html:form>
</body>
</html:html>
[/code]
Prontinho!
Experimentou colocar um System.out.println(bean.getNome()) antes do pDAO.Inclui(bean);.
Isso só pra ver se chega algum valor na Action. Lembrando que com o System o resultado sairá no console da tua IDE.
dsystem
Junho 29, 2010, 10:39am
#11
Coloquei e não chegou valor algum!
Nhai =/
Qualquer dúvida leia a apostila da Caelumaqui que explica muito bem sobre Struts.
Dê uma boa lida nessa apostila que vc irá aprender legal as configurações.
dsystem
Junho 29, 2010, 10:46am
#14
É…Vou tentar aqui
Pq fiz o debug e, quando ele passa no actionForm, ele dá que o valor é null, ou seja, ele nao está reconhecendo o nome do html:text =/
mas valew!
Fernando.
Consegui. Obrigada por toda ajuda. O problema estava no
<html:link href="PessoaAction.do?parameter=add"> Cadastrar </html:link>
Não estava, em momento algum, passando que seria um submit… Já consegui… Obrigadaaaaaaaaa!