Olá a todos,
Estou tentando fazer um form para o cadastro de um aluno ao sistema, uso o webwork e para persistência o hibernate, sempre me da um erro dizendo que os atributos estão vazios, vejam os meus códigos:
Classe CadastraAluno.java
/**
*
*/
package br.com.sistema.action;
import br.com.sistema.model.Aluno;
import br.com.sistema.model.AlunoDAO;
import com.opensymphony.xwork.ActionSupport;
/**
* @author Paulo
*
*/
public class CadastraAluno extends ActionSupport {
private Aluno a = new Aluno();
AlunoDAO dao = new AlunoDAO();
public String execute() throws Exception {
dao.save(a);
return "SUCCESS";
}
public void setAluno (Aluno aluno){
this.a = aluno;
}
public Aluno getAluno(){
return this.a;
}
}
xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<!-- Include webwork defaults (from WebWork JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<action name="CadastraAluno" class="br.com.sistema.action.CadastraAluno">
<result name="success" type="dispatcher">success.jsp</result>
</action>
</package>
</xwork>
O meu arquivo jsp com o form
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>::. Cadastro de Alunos .::</title>
<style type="text/css">
<!--
.style34 {font-size: 9px}
.style35 {
font-weight: bold;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
}
.style37 {font-weight: bold; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; }
-->
</style>
</head>
<body>
<form action="CadastraAluno.action" method="post" name="Cadastro" id="Cadastro">
<table width="438" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#CCCCCC">
<td height="30" colspan="2"><div align="center" class="style34"><span class="style37">Cadastro de Alunos </span></div></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">Ra </div></td>
<td width="339" height="30"><input name="aluno.matricula" type="text" id="aluno.matricula" size="15"></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">Nome </div></td>
<td height="30"><input name="aluno.nome" type="text" id="aluno.nome" size="50"></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">E-mail </div></td>
<td height="30"><input name="aluno.email" type="text" id="aluno.email" size="40"></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">Curso </div></td>
<td height="30"><select name="aluno.curso" id="aluno.curso">
<option selected>Sistemas de Informação</option>
<option>Administração</option>
</select></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">Senha </div></td>
<td height="30"><input name="aluno.senha" type="password" id="aluno.senha"></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"><div align="right" class="style35">Redigite Senha </div></td>
<td height="30"><input name="retype_pass" type="password" id="retype_pass"></td>
</tr>
<tr bgcolor="#FFFFCC">
<td width="99" height="30"> </td>
<td height="30"><input type="submit" name="Submit" value="Cadastrar"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td height="30" colspan="2"> </td>
</tr>
</table>
</form>
</body>
</html>
Fiz um teste já, na action de cadastro eu mesmo setei os atributos da classe Aluno no código, dae da certo, o q parece é que ele não pega os atributos do form.
Bom se alguém souber.
Atenciosamente,
Paulo
Já debugou a aplicação?
Só para garantir que os parâmetros estão chegando à ação, imprima o seguinte na Action:
ServletActionContext.getResquest().getParameterMap();
Olá carinha!!
Seguinte, passei por um problema parecido. A situação é a, e só consegui tratar depois que tirei a declaração new do corpo do método. Isso porque, quando o formulário é submetido, o webwork e ognl entram na jogada, construindo o objeto Aluno e setando os valores nos seus atributos, isso se tiveres implementados os set e get na action.
Então o que ocorre, é que o new acaba matando os dados que vem do formulário e disponibilizando um novo objeto dentro da action.
Experimente remover a linha a seguir:
private Aluno a = new Aluno();
Remover a linha ou só remover o 'new Aluno()"?
Lipe e Lucas,
Seguinte fiz isto daqui:
/**
*
*/
package br.com.sistema.action;
import br.com.sistema.hibernate.HibernateUtil;
import br.com.sistema.model.Aluno;
import br.com.sistema.model.AlunoDAO;
import com.opensymphony.xwork.ActionSupport;
/**
* @author Paulo
*
*/
public class CadastraAluno extends ActionSupport {
private Aluno a;
public String execute() throws Exception {
AlunoDAO dao = new AlunoDAO();
if ( a == null ){
addActionError("Você não passou a id da pessoa");
return ERROR;
} else {
dao.save(a);
return SUCCESS;
}
}
public void setAluno (Aluno aluno){
this.a = aluno;
}
public Aluno getAluno(){
return this.a;
}
}
E quanto clico no submit vai para a pagina de erro.
Será que o meu form está com pau, fiz ele no Dreamweaver.
Ja num sei mais o q fazer. 
Atenciosamente,
Paulo Henrique
E ae Paulo!!
Bom, tu chegaste a debuggar essa operação? Tu pode fazer o debug pelo eclipse, assim tu pode ver o que está acontecendo melhor.
A princípio era para ter funcionado, o teu form está correto. Tenta limpar a pasta work do teu contexto para ver se ajuda.
Paulo e todos que estão vendo esse post. Desconsiderem o comentário que realizei sobre o código acima. É válido tu fazer um new Aluno(), não há problema algum.
Lucas,
Ja limpei o work e nada, continua dando erro.
Paulo
Galera,
Pergunta idiota, como faço pra debugar no eclipse, é que comecei a usa-lo agora, sempre usei o netbeans, quer dizer vou continuar usando, mas só para projetos desktop, para web achei o eclipse melhor.
Atenciosamente,
Paulo
Se está usando o Tomcat procure por Sysdeo Tomcat, se está usando Jetty, por Jetty Launcher.
Você imprimiu os parâmetros da request como sugeri?
Lipe,
Estou usando o Tomcat com o Sysdeo.
Ah desculpe, não fiz o q vc me pediu.
Por favor, tenham paciência :lol:
VAleu,
Paulo
Para poder realizar o debug pelo eclipse vá em:
windows -> Preference -> Tomcat -> Source Path
Na quadro de informações que vai abrir, selecione o teu projeto na lista e clique em OK.
Depois é só rodar a aplicação novamente. 
Lipe e Lucas,
Vejam o que eu fiz, coloque o que o Lipe falou:
/**
*
*/
package br.com.sistema.action;
import br.com.sistema.model.Aluno;
import br.com.sistema.model.AlunoDAO;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionSupport;
/**
* @author Paulo
*
*/
public class CadastraAluno extends ActionSupport {
private Aluno a;
public String execute() throws Exception {
AlunoDAO dao = new AlunoDAO();
System.out.println(ServletActionContext.getRequest().getParameterMap());
dao.save(a);
return SUCCESS;
}
public void setAluno (Aluno aluno){
this.a = aluno;
}
public Aluno getAluno(){
return this.a;
}
}
E os erros:
16:43:16,718 ERROR ServletDispatcher: Could not execute action
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:40)
at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:23)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:480)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)
at br.com.sistema.model.AlunoDAO.save(AlunoDAO.java:21)
at br.com.sistema.action.CadastraAluno.execute(CadastraAluno.java:30)
at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:283)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:166)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
VAleu,
Paulo
Tenta mudar o nome da variavel Aluno para ‘aluno’ e não ‘a’.
E o que a impressão do Map mostra?
to com o mesmo problema descrito aqui…
16:43:16,718 ERROR ServletDispatcher: Could not execute action
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
alguem solucionou ae…alguem sabe como???