Webwork e form

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&nbsp; </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&nbsp; </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&nbsp; </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&nbsp; </div></td>
      <td height="30"><select name="aluno.curso" id="aluno.curso">
        <option selected>Sistemas de Informa&ccedil;&atilde;o</option>
        <option>Administra&ccedil;&atilde;o</option>
      </select></td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="99" height="30"><div align="right" class="style35">Senha&nbsp; </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&nbsp; Senha&nbsp; </div></td>
      <td height="30"><input name="retype_pass" type="password" id="retype_pass"></td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td width="99" height="30">&nbsp;</td>
      <td height="30"><input type="submit" name="Submit" value="Cadastrar"></td>
    </tr>
    <tr bgcolor="#CCCCCC">
      <td height="30" colspan="2">&nbsp;</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()"?

somente 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. :smiley:

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. :wink:

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?

Boa Lipe. :wink:

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???

ja arrumei… :smiley: