Foros del Web » Programación para mayores de 30 ;) » Java »

Dudas integración Hibernate + Spring + JSF

Estas en el tema de Dudas integración Hibernate + Spring + JSF en el foro de Java en Foros del Web. Buenas, estoy siguiendo un tutorial para integrar Hibernate + Spring + JSF en eclipse. Concretamente es el que está posteado por long nguyen en los ...
  #1 (permalink)  
Antiguo 17/02/2011, 07:03
 
Fecha de Ingreso: julio-2006
Mensajes: 20
Antigüedad: 17 años, 9 meses
Puntos: 0
Dudas integración Hibernate + Spring + JSF

Buenas,
estoy siguiendo un tutorial para integrar Hibernate + Spring + JSF en eclipse. Concretamente es el que está posteado por long nguyen en los comentarios de http://www.mkyong.com/jsf2/jsf-2-0-spring-hibernate-integration-example

Aquí tenéis el proyecto subido a mediafire: http://www.mediafire.com/?nj44qt24ol51nld

Os pego además el:

AccountBean.java

Código:
package vn.loga.bean;

import java.io.Serializable;
import java.util.List;

import vn.loga.bo.AccountBO;
import vn.loga.domain.Account;

public class AccountBean implements Serializable{
	private AccountBO accountBO;

	private String name;
	private String pass;
	private String email;

	public void setAccountBO(AccountBO accountBO) {
		this.accountBO = accountBO;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public String getPass() {
		return pass;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEmail() {
		return email;
	}

	// get all customer data from database
	public List<Account> getAccountList() {
		System.out.println("get aacount list in accountBean");
		return accountBO.findAllAccount();
	}

	// add a new customer data into database
	public String addAccount() {

		Account acc = new Account();
		
		acc.setName(name);
		acc.setPass(pass);
		acc.setEmail(email);

		accountBO.addNewAccount(acc);

		return "";
	}

}


web.xml

Código:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>jsf-spring-hibernate-ex1</display-name>


	<!-- Add Support for Spring -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<listener>
		<listener-class>
			org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>
	
	<!-- Change to "Production" when you are ready to deploy -->
	<context-param>
		<param-name>javax.faces.PROJECT_STAGE</param-name>
		<param-value>Development</param-value>
	</context-param>
	<!--Codigo sacado http://seamframework.org/Community/JavaxfacesapplicationViewExpiredException -->
	<context-param>
  		<param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
  		<param-value>true</param-value>
	</context-param>
<!-- fin de codigo de seamframework.org -->
	<!-- Welcome page -->
	<welcome-file-list>
		<welcome-file>faces/account.xhtml</welcome-file>
	</welcome-file-list>

	<!-- JSF mapping -->
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map these files with JSF -->
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.faces</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
</web-app>
faces-config.xml


Código:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
	version="2.0">

	<application>
		<el-resolver>
			org.springframework.web.jsf.el.SpringBeanFacesELResolver
    	</el-resolver>
	</application>

	<managed-bean>
		<managed-bean-name>accountBean</managed-bean-name>
		<managed-bean-class>vn.loga.bean.AccountBean</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
		<managed-property>
			<property-name>accountBO</property-name>
			<value>#{accountBO}</value>
		</managed-property>
	</managed-bean>

</faces-config>

accountlist.xhtml
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      >
    <h:head>
    	<h:outputStylesheet library="css" name="table-style.css"  />
    </h:head>
 
    <h:body>
 
    	<h1>Account List</h1>
 
 		<h:dataTable value="#{AccountBean.getAccountList()}" var="acc" styleClass="order-table" headerClass="order-table-header" rowClasses="order-table-odd-row,order-table-even-row">
 
    		<h:column>
    			<f:facet name="header">
    				accountid
    			</f:facet>
    				#{acc.id}
    		</h:column>
 
    		<h:column>
    			<f:facet name="header">
    				Name
				</f:facet>
    				#{acc.name}
    		</h:column>
 
 			<h:column>
    			<f:facet name="header">
    				email
				</f:facet>
    				#{acc.email}
    		</h:column>
    		
    		<h:column>
    			<f:facet name="header">
    				Created Date
				</f:facet>
    				#{acc.createdDate}
    		</h:column>
    		
    	</h:dataTable>
 		
 		<h2>Add New account</h2>
 		<h:form>
 			
 			<h:panelGrid columns="3">
			
				Name : 
				<h:inputText id="name" value="#{accountBean.name}" 
					size="20" required="true"
					label="Name" >
				</h:inputText>
					
				<h:message for="name" style="color:red" />
			
				Email : 
				<h:inputTextarea id="email" value="#{accountBean.email}" 
					cols="30" rows="10" required="true"
					label="Email" >
				</h:inputTextarea>
					
				<h:message for="email" style="color:red" />
				
			</h:panelGrid>
			
			<h:commandButton value="Submit" action="#{accountBean.addAccount()}" />

 		</h:form>
 		
    </h:body>
 
</html>
El proyecto lo que hace basicamente, mediante el account-list.xhtml, es insertar una fila en la base de datos, mediante Hibernate, con los campos "Name" y "email" que obtiene del formulario.


Mis dudas son las siguientes:



En el web.xml he tenido que insertar este código
Código:
	<!--Codigo sacado http://seamframework.org/Community/JavaxfacesapplicationViewExpiredException -->
	<context-param>
  		<param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
  		<param-value>true</param-value>
	</context-param>
<!-- fin de codigo de seamframework.org -->
Ya que sin él me daba un error al ejecutar la página, después de insertar en la base de datos, al volver a la página (registrar). El error era similar a
Código:
javax.faces.application.ViewExpiredException: viewId:/accountlist.xhtml - View /login.seam could not be restored.
Sabéis que hace exactamente ese código? Al parecer debe ser algún modo de compatibilidad entre JSF 1.1 y JSF 1.2, pero no se exactamente cual es su cometido.



La otra duda, más importante, es a la hora de crear una regla de navegación entre páginas.
Creo la página cuentaInsertada.xhtml
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"> 

<h:head></h:head> 
<body> 
<h:outputText value="Nombre: #{accountBean.name} y tu edad es: #{accountBean.email}" />
</body> 
</html>
A continuación, agrego la siguiente regla de navegación en el faces-config.xml:
Código:
 <navigation-rule>
  <display-name>insertarCuenta</display-name>
  <from-view-id>/accountlist.xhtml</from-view-id>
  <navigation-case>
   <to-view-id>/cuentaInsertada.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
Sin embargo, la página no me redirige a cuentaInsertada.xhtml después de la inserción en la base de datos.

Se os ocurre alguna idea para resolver estas dos dudas?

Un saludo y muchas gracias

Etiquetas: hibernate, integración, jsf, spring
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:55.