ActionListener上的按钮不调用函数



嗨,我创建了一个小表单来创建和编辑我的应用程序的用户。我可以编辑他们没有问题,但我不能创建新的用户。

我有一个数据表显示数据库中的用户我有一个按钮名为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 ("nuevo usuario ");

所以usuario为null是有意义的,因为它没有调用我的"nuevo"方法。我是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()) ;       
    }
}

我认为有必要让de p:commandButton这样处理自己

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

相关内容

  • 没有找到相关文章

最新更新