JSF 2.0 commandButton什么都不做 [英] JSF 2.0 commandButton do nothing

查看:50
本文介绍了JSF 2.0 commandButton什么都不做的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在实现一个简单的CRUD应用程序时遇到问题,我已经阅读了几乎所有在google,stackoverflow和roseindia中找到的项目,但是我的问题仍然存在.我做了一个简单的方面:

I have a problem implementing a simple CRUD application, I have read nearly all the items found in google, stackoverflow and roseindia, but my problem persists. I made this simple facelet:

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

Here is the 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:

Here is the 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文件:

and here is the web.xml file:

<?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的引用.

As you can see, there´s nothing special, but every time I press the h:commandButton, to save the data, always returns to the same page Create.xhtml without any error messages nor saves the information in the database, and worse, lose the reference to the style file syle.css.

推荐答案

经过几次阅读和调查,我解决了阅读此问题的问题

After several readings and investigation, i fixed the problem reading this information of @BalusC. I never use two h:form elements in my facelet, so I dont why now is working. Just I changed the h:commandButton for the Primefaces' p:commandButton and "voila", everyyhing works fine now.

这篇关于JSF 2.0 commandButton什么都不做的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆