按钮上的ActionListener没有调用该函数

时间:2013-04-15 05:40:10

标签: java jsf primefaces

您好我创建了一个小表单来创建和编辑我的应用程序的用户。我可以毫无问题地编辑它们,但我无法创建新用户。

我有一个显示数据库用户的数据表,我有一个名为Nuevo for new user的按钮

<p:commandButton id="nuevobtn" value="Nuevo"
                oncomplete="usuarioPanel.show()"
                actionListener="#{usuarioAdminController.nuevo}" />

因此,当我点击此按钮时,控制器会调用控制器上的函数nuevo,如下所示

public void nuevo() {
        System.out.println("nuevo usuario ");
        usuarioAdminDM.setUsuario(new Usuario());
    }

我们的想法是,当您点击按钮时会显示一个包含用户表单的对话框,并且Nuevo功能会创建一个空白用户,这样我就可以填写表单了。

但是当我点击该按钮时会出现

<?xml version='1.0' encoding='UTF-8'?>
<partial-response><error><error-name>class javax.el.PropertyNotFoundException</error-name><error-message><![CDATA[/pages/admin/usuario.xhtml @52,27 value="#{usuarioAdminDM.usuario.usuario}": Target Unreachable, 'usuario' returned null]]></error-message></error></partial-response>

查看我的jboss服务器的日志,我没看到 System.out.println(&#34; nuevo usuario&#34;);

所以有意义的是usuario是null因为它没有调用我的&#34; nuevo&#34;方法。我是JSF的新手,所以我很确定这是我忽视的东西。

这是我的usuarioAdminDM类

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

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import ec.edu.puce.biologia.model.Usuario;

@ManagedBean(name="usuarioAdminDM")
@ViewScoped
public class UsuarioAdminDM implements Serializable{

    private static final long serialVersionUID = 1L;
    private List<Usuario> usuarios;
    private Usuario usuario = new Usuario();
    private Usuario usuarioBusqueda = new Usuario();

    public List<Usuario> getUsuarios() {
        return usuarios;
    }
    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }
    public Usuario getUsuario() {
        return usuario;
    }
    public void setUsuario(final Usuario usuario) {
        this.usuario = usuario;
    }
    public Usuario getUsuarioBusqueda() {
        return usuarioBusqueda;
    }
    public void setUsuarioBusqueda(final Usuario usuarioBusqueda) {
        this.usuarioBusqueda = usuarioBusqueda;
    }
}

这是我的表格

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    template="/WEB-INF/templates/biologiaTemplate.xhtml">
    <ui:define name="title">Administración de Usuarios</ui:define>
    <ui:define name="content">
        <h:messages />
        <h:form id="usuarioAdminForm">
            <p:commandButton id="nuevobtn" value="Nuevo"
                oncomplete="usuarioPanel.show()"
                action="#{usuarioAdminController.nuevo}" />
            <p:dataTable var="usuarios" rowKey="#{usuarios.id}"
                value="#{usuarioAdminDM.usuarios}" id="tablaUsuario"
                selection="#{usuarioAdminDM.usuario}" selectionMode="single">
                <f:facet name="header">  
                    Seleccionar el Boton EDITAR después de seleccionar el Usuario   
                </f:facet>
                <p:column headerText="Usuario">
                    <h:outputText value="#{usuarios.usuario}" />
                </p:column>
                <p:column headerText="Nombre">
                    <h:outputText value="#{usuarios.nombre}" />
                </p:column>
                <p:column headerText="E-mail">
                    <h:outputText value="#{usuarios.email}" />
                </p:column>
                <p:column headerText="Tipo">
                    <h:outputText value="#{usuarios.tipo}" />
                </p:column>
                <p:column headerText="Activo">
                    <h:outputText value="Si" rendered="#{usuarios.activo}" />
                    <h:outputText value="No" rendered="#{!usuarios.activo}" />
                </p:column>
                <f:facet name="footer">
                    <p:commandButton id="viewButton" value="Editar"
                        process="@this,tablaUsuario" icon="ui-icon-search"
                        update=":usuarioAdminForm:formUsuario"
                        oncomplete="usuarioPanel.show()" />
                </f:facet>
            </p:dataTable>


            <p:dialog id="usuarioModal" header="Usuario" widgetVar="usuarioPanel"
                modal="true">
                <p:messages id="messages" showDetail="true" autoUpdate="true" />
                <h:panelGrid columns="2" id="formUsuario">
                    <h:outputLabel value="Nombre" for="nombreInput" />
                    <h:inputText value="#{usuarioAdminDM.usuario.nombre}"
                        id="nombreInput" />
                    <h:outputLabel value="Usuario" for="usuarioInput" />
                    <h:inputText value="#{usuarioAdminDM.usuario.usuario}"
                        id="usuarioInput" />

                    <h:outputLabel for="passwordInput1" value="Contraseña: " />
                    <p:password id="passwordInput1"
                        value="#{usuarioAdminDM.usuario.password}" match="passwordInput2"
                        label="Password 1" />

                    <h:outputLabel for="passwordInput2" value="Validación: " />
                    <p:password id="passwordInput2"
                        value="#{usuarioAdminDM.usuario.password}" label="Password 2" />

                    <h:outputLabel value="E-mail" for="emailInput" />
                    <h:inputText value="#{usuarioAdminDM.usuario.email}"
                        id="emailInput" />
                    <h:outputLabel value="Tipo" for="tipoInput" />
                    <h:selectOneMenu id="tipoInput"
                        value="${usuarioAdminDM.usuario.tipo}">

                        <f:selectItem itemValue="ADMINISTRADOR" itemLabel="Administrador" />

                        <f:selectItem itemValue="EDITOR" itemLabel="Editor" />

                        <f:selectItem itemValue="VISITANTE" itemLabel="Visitante" />

                    </h:selectOneMenu>
                    <h:outputLabel value="Activo" for="activoInput" />
                    <p:selectOneRadio id="activoInput"
                        value="#{usuarioAdminDM.usuario.activo}">
                        <f:selectItem itemLabel="Sí" itemValue="True" />
                        <f:selectItem itemLabel="No" itemValue="False" />
                    </p:selectOneRadio>
                </h:panelGrid>
                <p:commandButton value="Guardar" update="tablaUsuario,messages"
                    id="guardarBtn" actionListener="#{usuarioAdminController.guardar}" />

            </p:dialog>

            <p:remoteCommand name="inicializar" process="@this"
                actionListener="#{usuarioAdminController.init()}"
                update="tablaUsuario" />

        </h:form>
        <script type="text/javascript">
        inicializar();
    </script>
    </ui:define>
</ui:composition>

这里的完整控制器类

@ManagedBean(name="usuarioAdminController")
@ViewScoped
public class UsuarioAdminController {

    @ManagedProperty(value="#{usuarioAdminDM}")
    private UsuarioAdminDM usuarioAdminDM;

    @EJB
    private SeguridadService servicio;

    @PostConstruct
    public void init() {
        System.out.println("Inicializando!");       
        obtenerUsuarios();
    }
    public void nuevo(ActionEvent event) {
        System.out.println("nuevo usuario ");
        usuarioAdminDM.setUsuario(new Usuario());
    }
    public void guardar() {
        //try {
            System.out.println("Grabar o guardar usuario");
            if (usuarioAdminDM.getUsuario() != null) {
                if (usuarioAdminDM.getUsuario().getId() == null) {
                    System.out.println("Nuevo usuario");
                    servicio.guardar(usuarioAdminDM.getUsuario());
                } else {
                    System.out.println("Actualizando");
                    servicio.actualizar(usuarioAdminDM.getUsuario());
                }

            }
            obtenerusuarios();

        /*} catch (EntidadNoGrabadaException e) {
            e.printStackTrace();
        }*/
    }
    public UsuarioAdminDM getUsuarioAdminDM() {
        return usuarioAdminDM;
    }
    public void obtenerusuarios() {
        usuarioAdminDM.setUsuarios(servicio.obtenerTodos());

    }

    public void setUsuarioAdminDM(UsuarioAdminDM usuarioAdminDM) {
        this.usuarioAdminDM = usuarioAdminDM;
    }
    public void obtenerUsuarios(){
        usuarioAdminDM.setUsuarios(servicio.obtenerTodos()) ;       
    }
}

1 个答案:

答案 0 :(得分:0)

我认为有必要发送de p:commandButton来像这样处理自己

<p:commandButton id="nuevobtn" value="Nuevo"
                oncomplete="usuarioPanel.show()"
                action="#{usuarioAdminController.nuevo}" process="@this"/>