我在实现一个简单的CRUD应用程序时遇到问题,我已经阅读了几乎所有在google,stackoverflow和roseindia中找到的项目,但我的问题仍然存在。我做了这个简单的面孔:
<ui:composition template="./../../templates/adminTemplate.xhtml">
<ui:define name="tope">
<h1>Ingreso de Noticias</h1>
</ui:define>
<ui:define name="content">
<h:form id="newsForm">
<h:panelGrid columns="2">
<h:outputLabel value="Lugar: "/>
<h:inputText value="#{noticiasBean.entity.lugar}"/>
<h:outputLabel value="Fecha: "/>
<h:inputText value="#{noticiasBean.entity.fecha}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm"/>
</h:inputText>
<h:outputLabel value="Autor: "/>
<h:inputText value="#{noticiasBean.entity.autor}"/>
<h:outputLabel value="PreTítulo: "/>
<h:inputText value="#{noticiasBean.entity.pretitulo}"/>
<h:outputLabel value="Título: "/>
<h:inputText value="#{noticiasBean.entity.titulo}"/>
<h:outputLabel value="Comentario: "/>
<h:inputText value="#{noticiasBean.entity.comentario}"/>
<h:outputLabel value="Cuerpo: "/>
<h:inputTextarea value="#{noticiasBean.entity.cuerpo}"/>
</h:panelGrid>
<h:commandButton value="Guardar" action="#{noticiasBean.create}"/>
</h:form>
<h:messages style="color: red;"/>
</ui:define>
</ui:composition>
这是adminTemplate:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="./../resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="./../resources/css/cssLayout.css" rel="stylesheet" type="text/css" />
<h:outputStylesheet name="primeStyles.css" library="css"/>
<title>Facelets Template</title>
</h:head>
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" size="70" resizable="true" closable="true" collapsible="true">
<ui:insert name="tope"> Sección de Administración</ui:insert>
</p:layoutUnit>
<p:layoutUnit position="south" size="70">
<ui:insert> Pie de página </ui:insert>
</p:layoutUnit>
<p:layoutUnit position="west" size="160" header="Menu" resizable="true" collapsible="true">
<h:form id="formMenu">
<p:panelMenu style="width: 158px;">
<p:submenu label="Home">
<p:menuitem value="Admin" action="/admin/admin"/>
<p:menuitem value="Salir" action="#{loginController.logout}"/>
</p:submenu>
<p:submenu label="Contenido">
<p:menuitem value="Cargar Noticia" action="/admin/noticias/Create"/>
</p:submenu>
</p:panelMenu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center">
<ui:insert name="content">
Aqui va el contenido
</ui:insert>
</p:layoutUnit>
</p:layout>
</h:body>
这是managedBean:
@ManagedBean(name="noticiasBean")
@RequestScoped
public class NoticiasBean {
private NoticiaJpaController jpaController = null;
private DataModel items = null;
private Noticia entity;
/**
* Creates a new instance of NoticiasBean
*/
public NoticiasBean() {
System.out.println("Instanciado el bean");
}
private NoticiaJpaController getJpaController() {
if(jpaController == null){
jpaController = new NoticiaJpaController(Utils.getEntityManagerFactory());
}
return jpaController;
}
public Noticia getEntity() {
if(entity == null){
entity = new Noticia();
}
return entity;
}
public String prepareCreate() {
entity = new Noticia();
return "Create";
}
public String create() {
System.out.println("Llegó al método create");
try {
getJpaController().create(entity);
String mensaje = "Noticia creada exitósamente";
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje, mensaje);
FacesContext.getCurrentInstance().addMessage(null, facesMsg);
return prepareCreate();
} catch (Exception e) {
String mensaje = "Error de Persistencia";
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje, mensaje);
FacesContext.getCurrentInstance().addMessage(null, facesMsg);
return null;
}
}
public String prepareList() {
recreateModel();
return "List";
}
public DataModel getItems() {
if (items == null) {
items = new ListDataModel(getJpaController().findNoticiaEntities());
}
return items;
}
private void recreateModel() {
items = null;
}
}
这是web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>Usado para evitar que ingresen sin estar autenticado</description>
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESION</param-name>
<param-value>false</param-value>
</context-param>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/faces/index.xhtml</location>
</error-page>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
正如您所看到的,没有什么特别之处,但每次按h:commandButton来保存数据时,总是返回到同一页面Create.xhtml而没有任何错误消息,也没有将信息保存在数据库中,更糟糕的是,失去了对样式文件syle.css的引用。
答案 0 :(得分:2)
经过多次阅读和调查后,我解决了阅读@BalusC information的问题。我从不在我的facelet中使用两个h:form元素,所以我不知道为什么现在正在工作。只是我为Primefaces的p:commandButton和“voila”更改了h:commandButton,everyyhing现在工作正常。