Struts 2 + spring 2 + jpa

5 respostas
R

Oi tudo bem? Bem nessa simples aplicação estou tendo o seguinte erro na hora que executo meu arquivo jsp:

SEVERE: Servlet.service() for servlet default threw exception java.lang.NullPointerException at br.jm.actions.InsereContatoAction.execute(InsereContatoAction.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Thread.java:595)

5 Respostas

R

Ah meus arquivos:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>
	Cadastro</display-name>
	
	<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
	
	<servlet>
		<servlet-name>dwr</servlet-name>
		<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>dwr</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
	
	<filter>
		<filter-name>cadastro</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>cadastro</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory"></property>
      <property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
      <property name="url" value="jdbc:mysql://localhost:3306/javamagazine"></property>
      <property name="username" value="root"></property>
      <property name="password" value="contab02"></property>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
	<property name="persistenceUnitName" value="testeStruts"></property>
	<property name="dataSource" ref="dataSource"></property>
    <property name="jpaDialect">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"></bean>
    </property>
    <property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
	<property name="database" value="MYSQL"></property>
	<property name="showSql" value="true"></property>
	<property name="generateDdl" value="true"></property>
	</bean>
    </property>
</bean>

<bean id="loginDao" class="br.jm.persistencia.LoginDAO">
	<constructor-arg ref="entityManagerFactory"></constructor-arg>
</bean>

<bean id="contatoDao" class="br.jm.persistencia.ContatoDAO">
   <constructor-arg ref="entityManagerFactory"></constructor-arg>
</bean>

<bean id="servicoContato" class="br.jm.servico.ContatoImpl" scope="singleton">
	<property name="contatoDAO" ref="contatoDao"></property>
</bean>

<bean id="servicoLogin" class="br.jm.servico.LoginImpl" scope="singleton">
	<property name="loginDAO" ref="loginDao"></property>
</bean>

<bean id="insereContato" class="br.jm.actions.InsereContatoAction" scope="prototype">
	<property name="servico" ref="servicoContato"></property>
</bean>

<bean id="listaContatos" class="br.jm.actions.ListaContatosAction" scope="prototype">
	<property name="servico" ref="servicoContato"></property>
</bean>

<bean id="login" class="br.jm.actions.LoginAction" scope="prototype">
	<property name="servico" ref="servicoLogin"></property>
</bean>

<bean id="removeContato" class="br.jm.actions.RemoverContatoAction" scope="prototype">
	<property name="servico" value="servicoContato"></property>
</bean>

</beans>


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>
	<include file="struts-default.xml" />
	
	<package name="default" extends="struts-default">
		<action name="login!*" method="{1}" class="br.jm.actions.LoginAction">
			<result name="input">/index.jsp</result>
			<result name="valido">/contato.jsp</result>
			<result name="invalido">/erroLogin.jsp</result>
		</action>
		
		<action name="insereContato" class="br.jm.actions.InsereContatoAction">
			<result name="input">/contato.jsp</result>
			<result>/contato.jsp</result>
		</action>
		
		<action name="listaContatos" class="br.jm.actions.ListaContatosAction">
			<interceptor-ref name="exception"/>
			<interceptor-ref name="basicStack"/>
			<exception-mapping result="erroServicoContato" exception="java.lang.Exception"/>
			<result name="erroServicoContato">/erroServicoContato.jsp</result>
			<result>/listaContatos.jsp</result>
		</action>
		
		<action name="removerContato!*" method="removeLista" class="br.jm.actions.RemoverContatoAction">
			<interceptor-ref name="exception"/>
			<interceptor-ref name="basicStack"/>
			<exception-mapping result="erroServicoContato" exception="java.lang.Exception"/>
			<result name="erroServicoContato">/erroServicoContato.jsp</result>
			<result>/contato.jsp</result>
		</action>
		
		<action name="removerContato!*" method="removeUmContato" class="br.jm.actions.RemoverContatoAction">
			<interceptor-ref name="exception"/>
			<interceptor-ref name="basicStack"/>
			<exception-mapping result="erroServicoContato" exception="java.lang.Exception"/>
			<result name="erroServicoContato">/erroServicoContato.jsp</result>
			<result>/contato.jsp</result>
		</action>
		
	</package>
</struts>

InsereContatoAction

package br.jm.actions;

import br.jm.entidades.Contato;
import br.jm.servico.ContatoImpl;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class InsereContatoAction extends ActionSupport {
	
	/**
	 * 
	 */
	
	private ContatoImpl servico;
	private Contato contato;
	
	public InsereContatoAction() {
	
	}
	
	
	
	public InsereContatoAction(ContatoImpl servico, Contato contato) {
		this.servico = servico;
		this.contato = contato;
	}



	public String execute() throws Exception {
		if(hasActionErrors() || hasFieldErrors()) {
			return "input";
		}
		servico.adiciona(contato);
		
		return Action.SUCCESS;
	}

	public Contato getContato() {
		return contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}

	public ContatoImpl getServico() {
		return servico;
	}

	public void setServico(ContatoImpl servico) {
		this.servico = servico;
	}

}
R

O Meu

ContatoDAO

package br.jm.persistencia;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.jm.entidades.Contato;

public class ContatoDAO {

	private EntityManagerFactory entityManagerFactory;

	private EntityManager entityManager;

	private EntityTransaction transaction;

	public ContatoDAO() {

	}

	public ContatoDAO(EntityManagerFactory entityManagerFactory) {
		this.entityManagerFactory = entityManagerFactory;
		this.entityManager = this.entityManagerFactory.createEntityManager();
		this.transaction = this.entityManager.getTransaction();

	}

	public void adiciona(Contato contato) {
		
		if (this.transaction.isActive()) {
			entityManager.persist(contato);
			transaction.commit();
		} else {
			transaction.begin();
			entityManager.persist(contato);
			transaction.commit();

		}
	}

	public List<Contato> obtemListaContato() {
		Query query = this.entityManager.createQuery("SELECT c FROM Contato c");
		return query.getResultList();

	}

	public void removerContato(Long id) {
		Contato contato = acharContato(id);

		if (this.transaction.isActive()) {
			this.entityManager.remove(contato);
			this.transaction.commit();

		} else {
			this.transaction.begin();
			this.entityManager.remove(contato);
			this.transaction.commit();

		}

	}

	public Contato acharContato(Long id) {
		Contato contato = null;
		contato = this.entityManager.find(Contato.class, id);

		return contato;

	}

	public void removeContatos() {
		Query query = null;

		if (this.transaction.isActive()) {
			query = this.entityManager.createQuery("DELETE Contato");
			query.executeUpdate();
			this.transaction.commit();
		} else {
			this.transaction.begin();
			query = this.entityManager.createQuery("DELETE Contato");
			query.executeUpdate();
			this.transaction.commit();
		}
	}

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	public EntityManagerFactory getEntityManagerFactory() {
		return entityManagerFactory;
	}

	public void setEntityManagerFactory(
			EntityManagerFactory entityManagerFactory) {
		this.entityManagerFactory = entityManagerFactory;
	}

	public EntityTransaction getTransaction() {
		return transaction;
	}

	public void setTransaction(EntityTransaction transaction) {
		this.transaction = transaction;
	}

}
[b]ContatoImpl[/b]

package br.jm.servico;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import br.jm.entidades.Contato;
import br.jm.persistencia.ContatoDAO;

public class ContatoImpl implements ContatoIF {
	private ContatoDAO contatoDAO;
	
	
	public ContatoImpl(){
		
	}
	
	public ContatoImpl(ContatoDAO contatoDAO){
		this.contatoDAO = contatoDAO;
	}
	

	public Contato acharContato(Long id) {
		
		return contatoDAO.acharContato(id);
	}

	public List<Contato> obtemListaContato() {
		List<Contato> lista = new ArrayList<Contato>();
		List<Contato> lista2 = contatoDAO.obtemListaContato();
		
		if(lista2 != null){
			lista.addAll(lista2);
		}
		return Collections.unmodifiableList(lista);
		
	}

	public void removerContato(Long id) {
		contatoDAO.removerContato(id);

	}

	public void removeContatos() {
		contatoDAO.removeContatos();

	}

	public void adiciona(Contato contato) {
		contatoDAO.adiciona(contato);

	}

	public ContatoDAO getContatoDAO() {
		return contatoDAO;
	}

	public void setContatoDAO(ContatoDAO contatoDAO) {
		this.contatoDAO = contatoDAO;
	}

}
R

O meu
contato.jsp

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Magazine</title>
</head>
<s:head theme="ajax"/>
<body background="lightblue">
<s:tabbedPanel id="panel1" theme="ajax">
	<s:div label="Cadastro" theme="ajax">
		<center>
		<div>
		<table border="2" cellpadding="10" cellspacing="0" bordercolor="blue" background="buttonhighlight" align="center">
		<tr>
			<td><b>Formulário de Registro</b></td>
		</tr>
		<tr>
			<td>
			<s:form action="insereContato.action" validate="true">
				<s:textfield name="contato.pessoa.nome" label="Nome"></s:textfield>
				<s:textfield name="contato.pessoa.sobreNome" label="Sobrenome"></s:textfield>
				<s:textfield name="contato.email" label="Email"></s:textfield>
				<s:textfield name="contato.telefone.ddd" label="DDD"></s:textfield>
				<s:textfield name="contato.telefone.numero" label="Numero"></s:textfield>
				<s:datetimepicker name="contato.pessoa.dataDeNascimento" label="Data de Nascimento" displayFormat="dd/MM/yyyy"/>
				
				<s:submit value="Gravar" notifyTopics="listaContatoTopic"/>
			</s:form>
			</td>
		</tr>	
		</table>
		</div>
		</center>
	</s:div>

	<s:div label="Lista Contatos" theme="ajax">
		<center>
			<s:div id="listaContato" href="listaContatos.action" listenTopics="listaContatoTopic" theme="ajax" showLoadingText="true" showErrorTransportText="true" 
			errorText="Um erro aconteceu, tente novamente..." loadingText="Obtendo lista de contatos...">
	</s:div>
	
	<s:submit href="/removerContato!removeLista.action" value="Limpar Lista" notifyTopics="listaContatoTopic" theme="ajax" align="center" showLoadingText="true" 
	showErrorTransportText="true" errorText="Um erro ocorreu, tente novamente..." loadingText="Limpando Lista de contatos..."/>
		
		</center>
	</s:div>

</s:tabbedPanel>

</body>
</html>
Henrik

no metodo execute la na linha 35, voce nao teria que fazer

?

O_SANTO_

Será que você não deveria o this nesta parte de código:

public void adiciona(Contato contato) {  
           
         if (this.transaction.isActive()) {  
             entityManager.persist(contato);  
             [b]this.[/b]transaction.commit();  
         } else {  
             [b]this.[/b]transaction.begin();  
             entityManager.persist(contato);  
             [b]this.[/b]transaction.commit();  
   
         }  
     }
Criado 1 de janeiro de 2008
Ultima resposta 3 de jan. de 2008
Respostas 5
Participantes 3