Struts2 e Hibernate

5 respostas
L

Olá pessoal.

Criei uma pequena aplicação (seguindo um tutorial 5*) usando strus2 na qual o utilizador apenas insere o primeiro e ultimo nome e a idade.

Em caso de sucesso a aplicação mostra ao utilizador a pagina success.jsp com a idade do utilizador em dias e o nome introduzido.

Agora estava a tentar guardar os dados inseridos numa base de dados usando o hibernate.
Para começar achei bem separar o POJO (gets e sets) do execute() da classe que defini. Criei entao a classe personPOJO e personAction.
O problema é que agora nada funciona porque não consigo obter os dados introduzidos pelo utilizador na form.

ERROR [ParametersInterceptor] ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'age' with value '[Ljava.lang.String;@73327332'
ERROR [ParametersInterceptor] ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'firstName' with value '[Ljava.lang.String;@72747274'
ERROR [ParametersInterceptor] ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'lastName' with value '[Ljava.lang.String;@72d472d4'

Aqui estao as 2 classes e o ficheiro struts-form.xml:

PersonPOJO.java:

package form.model;

import com.opensymphony.xwork2.ActionSupport;

public class PersonPOJO extends ActionSupport {
	
	String firstName;
	String lastName;
	String age;
	String message;
	int ageDays;
	
	// GETTERS and SETTERS
	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public int getAgeDays() {
		return ageDays;
	}

	public void setAgeDays(int ageDays) {
		this.ageDays = ageDays;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

PersonAction.java

package form.action;

import com.opensymphony.xwork2.ActionSupport;


import form.model.*;


public class PersonAction extends ActionSupport{
	
	private PersonPOJO personPOJO;

	
	public String execute(){
		
		this.personPOJO = new PersonPOJO();
		
		if( personPOJO.getAge() != null && personPOJO.getFirstName() != null && personPOJO.getLastName()!=null){
			personPOJO.setAgeDays(Integer.parseInt(personPOJO.getAge())*365);
		System.out.print("PASSOU!!!!!! --------------------------------");
		personPOJO.setMessage("Sucesso! Esta mensagem foi gerada na Action");
		return SUCCESS;
		}
		else{
			personPOJO.setMessage("Erro! Esta mensagem foi gerada na Action");
			return ERROR;
		}
	}
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

 <struts>
    <package name="batatas2" namespace="/pages" extends="struts-default">
         <action name="PersonAction_GO" class="form.action.PersonAction">
            <result name="error" type="dispatcher">/pages/erro.jsp</result>
            <result name="success" type="dispatcher">/pages/sucesso.jsp</result>
        </action>
    </package>  
 </struts>

PersonForm.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
 <%@ taglib prefix="s" uri="/struts-tags"%>

<!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>Dados Pessoais</title>
</head>

<body>
		<div align="center">
			<s:form name="form" action="PersonAction_GO">
				<s:textfield id="firstName" label="First Name" name="firstName"/>
				<s:textfield id="lastName" label="Last Name" name="lastName"/>
				<s:textfield id="age" label="Age" name="age"/>
				<s:submit value="OK"/>
			</s:form>
		</div>
</body>
</html>

Peço desculpa pelo post gigante mas preciso de ideias.
Obrigado pela ajuda pessoal.

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Carneiro[/color][/size] :joia:

5 Respostas

F

Olá l1nk.
Você tem que está errando no seguinte:
1 - A Classe PersonPOJO.java não estenderá ActionSupport. Pois ela não é uma action e sim um POJO como vc disse.
2 - Como na sua classe action vc criou um objeto do seu pojo, lah no jsp vc tem que identificar corretamente os atributos, assim:

<s:form name="form" action="PersonAction_GO">
<s:textfield id="firstName" label="First Name" name="personPOJO.firstName"/>
<s:textfield id="lastName" label="Last Name" name="personPOJO.lastName"/>
<s:textfield id="age" label="Age" name="personPOJO.age"/>
<s:submit value="OK"/>

Entendeu?
Testa aew. Ah, e por acaso esse tutorial 5* foi aquele que eu te passei? rs… Se for, agradeça ao autor lá que é um cara bem bacana.
Abraço.

C

Lembrando que se você quiser pode criar uma Action POJO.

L

Olá.
Obrigado pela ajuda mas o erro mantém-se.

Eu já alterei como disseste e fiz mais uma modificação na Action. Defini aí a variável “message” e retirei-a do POJO uma vez que ela não tinha nada haver com a form.

Agora o “error.jsp” aparece como deve ser o que significa que os campos estão a NULL e a Action ta a responder.

Mas o que eu queria mesmo era ver a página “success.jsp” :slight_smile:

Preciso mesmo de ajuda para andar com este trabalho para a frente…

P.S: Falaste em Action POJO. Como poderia implementar isso? Eu vou implementar isto com Spring e Hibernate. É aconselhável usar o Action POJO?

Obrigado pela ajuda. Se precisares de mais dados é so dizer que eu envio o k for preciso. Abraço

G

1 - Seu POJO não deve estender a classe ActionSupport.
2 - Você deve identificar o nome dos campos:

<s:textField label="Foo" name"pojo.propriedade" />
L

Obrigado pela ajuda mas o erro continua.

A pagina de inserçao de dados está assim:

PersonForm.jsp
[i]<%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“UTF-8”%>
<%@ taglib prefix=“s” uri="/struts-tags"%>

<!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>Dados Pessoais</title>
</head>

<body>
<div align=“center”>
<s:form name=“form” action=“PersonAction_GO” method=“POST”>
<s:textfield id=“firstName” label=“First Name” name=“personPOJO.firstName”/>
<s:textfield id=“lastName” label=“Last Name” name=“personPOJO.lastName”/>
<s:textfield id=“age” label=“Age” name=“personPOJO.age”/>
<s:submit value=“OK”/>
</s:form>
</div>
</body>[/i]

Talvez o erro esteja no struts.xml e struts-form.xml:

struts.xml
[i]<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
http://struts.apache.org/dtds/struts-2.0.dtd”>

<struts>

&lt;constant name="struts.enable.DynamicMethodInvocation" value="true"&gt;&lt;/constant&gt;
&lt;constant name="struts.devMode" value="true"&gt;&lt;/constant&gt;

&lt;include file="struts-helloworld.xml"&gt;&lt;/include&gt;
&lt;include file="struts-form.xml"&gt;&lt;/include&gt;

</struts>[/i]

struts-form.xml:
[i]<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
http://struts.apache.org/dtds/struts-2.0.dtd”>

<struts>

&lt;package name="batatas2" namespace="/pages" extends="struts-default"&gt;
     
     &lt;action name="PersonAction" class="form.action.Person"&gt;
        &lt;result name="error" type="dispatcher"&gt;/pages/erro.jsp&lt;/result&gt;
        &lt;result name="success" type="dispatcher"&gt;/pages/sucesso.jsp&lt;/result&gt;
    &lt;/action&gt;

&lt;/package&gt;

</struts>[/i]

Preciso mesmo de pôr isto a funcionar…
Se me puderem ajudar agradecia.

Abraço

Criado 14 de junho de 2007
Ultima resposta 16 de jun. de 2007
Respostas 5
Participantes 4