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>
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.
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.
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.
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.
/**
*
*/
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)
16:43:16,718 ERROR ServletDispatcher: Could not execute action
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity