Jsf 在primefaces中刷新对话框

Jsf 在primefaces中刷新对话框,jsf,primefaces,Jsf,Primefaces,我正在构建一个应用程序,其中需要注册一个用户,更准确地说,除了他的姓名、用户名和一些其他信息之外,还需要注册一张用户图片,当显示注册窗口时,加载一张默认用户图片,然后当他们选择一张新图片时,默认图片消失,所选图片显示在窗口上,同时还会显示一个新按钮,该按钮允许用户删除所选图片,因此必须再次显示默认图片,但如果单击de按钮返回默认图片并删除所选图片,我仍然无法再次显示默认图片 列出用户并显示模式窗口的视图 <?xml version="1.0" encoding="UTF-8" ?>

我正在构建一个应用程序,其中需要注册一个用户,更准确地说,除了他的姓名、用户名和一些其他信息之外,还需要注册一张用户图片,当显示注册窗口时,加载一张默认用户图片,然后当他们选择一张新图片时,默认图片消失,所选图片显示在窗口上,同时还会显示一个新按钮,该按钮允许用户删除所选图片,因此必须再次显示默认图片,但如果单击de按钮返回默认图片并删除所选图片,我仍然无法再次显示默认图片

列出用户并显示模式窗口的视图

<?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:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
         <ui:composition template="/sesionAdmin/_admintmp.xhtml">

        <ui:define name="body">
    <h:head>
        <h:outputScript library="js" name ="Calendario.js"/>
    </h:head>  
    <h:body>

        <h:form>
            <p:commandButton id="createButton"  value="Registrar usuario" 
                             onclick="PF('UsuarioCreateDialog').show()">

            </p:commandButton>
        </h:form>
        <p:separator/>
        <h:form id="UsuarioListForm">
            <p:panelGrid columns="2" styleClass="panelgrid">
                <p:outputLabel style="font-weight: bold;" value="Buscar usuario:" />
                        <p:inputText  placeholder="Digite nombres, apellidos, nombre de usuario o email" 
                                      style="width: 350px;"  value="#{usuarioController.datoBusqueda}" >
                            <p:ajax event="keyup" update="datalist" listener="#{usuarioController.buscarUsuario()}" />                                
                        </p:inputText>                          
                    </p:panelGrid>
            <p:dataTable id="datalist" value="#{usuarioController.items}" var="item"
                         paginator="true" widgetVar="tablaUsuarios"
                         rows="10"
                         rowsPerPageTemplate="10,20"
                         >
                <f:facet name="header">

                </f:facet>

                <p:column >
                    <f:facet name="header">
                        <h:outputText value="Nombres"/>
                    </f:facet>
                    <h:outputText value="#{item.usunombres}"/>
                </p:column>
                <p:column >
                    <f:facet name="header">
                        <h:outputText value="Apellidos"/>
                    </f:facet>
                    <h:outputText value="#{item.usuapellidos}"/>
                </p:column>
                <p:column >
                    <f:facet name="header">
                        <h:outputText value="Nombre  de usuario"/>
                    </f:facet>
                    <h:outputText value="#{item.usunombreusuario}"/>
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Email"/>
                    </f:facet>
                    <h:outputText value="#{item.usuemail}"/>
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Cargo"/>
                    </f:facet>
                    <h:outputText value="#{item.carid.carnombre}"/>
                </p:column>
                <p:column width="70" style="text-align: center">
                    <f:facet name="header">
                        <h:outputText value="Foto" />
                    </f:facet>
                    <p:graphicImage id="imgUsuario" value="#{usuarioController.imagenFlujo}" width="50"  height="50" >
                        <f:param name="id" value="#{item.usuid}" />
                    </p:graphicImage>                            

                </p:column> 
                <p:column style="width: 90px">
                    <f:facet name="header">
                        <p:outputLabel value="Acciones"/>
                    </f:facet>
                    <p:commandButton id="viewButton" icon="ui-icon-search" action="#{usuarioController.seleccionarUsuarioVer(item)}" update=":UsuarioViewForm, :formfotoView" oncomplete="PF('UsuarioViewDialog').show()" />
                    <p:commandButton id="editButton" icon="ui-icon-pencil" action="#{usuarioController.seleccionarUsuarioEditar(item)}"  update=":UsuarioEditForm, :formEditarfoto" oncomplete="PF('UsuarioEditDialog').show()" />
                </p:column>
            </p:dataTable>
        </h:form>

        <ui:include src="RegistrarUsuario.xhtml"/>
        <ui:include src="EditarUsuario.xhtml"/>
        <ui:include src="VerInfoUsuario.xhtml"/>
        <p:dialog header="Información" modal="true" position="center" widgetVar="mensajeRegistroExitoso" closable="false">
            <p:messages  style="font-size: 15px;"  showDetail="true" autoUpdate="true"/>
            <h:form>
                <p:commandButton  value="Aceptar" style="font-weight: normal;"
                                  onclick="PF('mensajeRegistroExitoso').hide()"/>
            </h:form>
        </p:dialog>
    </h:body>
        </ui:define>
         </ui:composition>
</html>

用户对话框窗口

<?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://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">



    <ui:composition>            
        <p:dialog id="UsuarioCreateDlg" widgetVar="UsuarioCreateDialog" modal="true" resizable="false" 
                  appendTo="@(body)" header="Registrar usuario">
            <h:outputStylesheet name="css/appearUploadFile.css" />
            <p:ajax event="close" listener="#{usuarioController.cancelarRegistroUsuario()}"/>
            <p:outputLabel style="float: right;" value="&ensp; Campos obligatorios" />  
            <p:outputLabel  style="float: right; font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />                      
            <br/>
            <!--h:form id="formfoto" enctype="multipart/form-data"-->
                <center>
                    <p:outputLabel style="font-weight:bold;" value="Foto de perfil" />                   
                </center>
                <center>    
                    <br/>
                    <p:graphicImage  rendered="#{usuarioController.miImagen ==null}"
                                     style="height:100px; width:100px;"
                                     value="#{usuarioController.imagenDefecto}"/>
                    <p:graphicImage  rendered="#{usuarioController.miImagen !=null}"
                                     id="img"
                                     style="height:100px; width:100px;"
                                     value="#{usuarioController.miImagen}"
                                     cache="false"/>
                    <p:fileUpload  mode="advanced" auto="true" fileUploadListener="#{usuarioController.convertirImagenABytes}"
                                   allowTypes="/(\.|\/)(jpe?g|png)$/" sizeLimit="10000000" invalidFileMessage="El archivo no está en el formato válido"
                                   required="true"
                                   update="@form" multiple="false" label="Subir imagen">
                    </p:fileUpload> 
                    <h:commandLink rendered="#{usuarioController.miImagen !=null}" 
                                     value="Imagen por defecto" 
                                     actionListener="#{usuarioController.establecerFotoPorDefecto()}"

                                     >
                        <f:ajax execute="@all" render="@form"/>
                        <p:ajax update="UsuarioCreateDlg"/>
                    </h:commandLink>

                </center>
                <br/>
            <!--/h:form-->
            <h:form id="UsuarioCreateForm">
                <p:panelGrid  styleClass="panelgrid"  id="panel2">
                    <p:row>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Nombres:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:inputText id="usunombres" value="#{usuarioController.selected.usunombres}"
                                         title="#{bundleAdmin.CreateUsuarioTitle_usunombres}" required="true" 
                                         requiredMessage="Campo obligatorio">
                                <f:validator validatorId="ValidarCampo75Caracteres"/>
                                <p:ajax event="keyup" update="msgCaracteresNombre"/>
                            </p:inputText>

                        </p:column>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Apellidos:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:inputText id="usuapellidos" value="#{usuarioController.selected.usuapellidos}"
                                         title="#{bundleAdmin.CreateUsuarioTitle_usuapellidos}" required="true" 
                                         requiredMessage="Campo obligatorio">
                                <f:validator validatorId="ValidarCampo75Caracteres"/>
                                <p:ajax event="keyup" update="msgCaracteresApellido"/>
                            </p:inputText>                                        
                        </p:column>
                    </p:row>
                    <p:row> 
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message id="msgCaracteresNombre" for="usunombres"/>
                        </p:column>
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message id="msgCaracteresApellido" for="usuapellidos"/>
                        </p:column>
                    </p:row>
                    <p:row>

                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Genero:"  />
                        </p:column>
                        <p:column>
                            <p:selectOneRadio value="#{usuarioController.selected.usugenero}">
                                <f:selectItem itemLabel="Masculino" itemValue="M" />
                                <f:selectItem itemLabel="Femenino" itemValue="F" />                                    
                            </p:selectOneRadio>

                        </p:column>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Fecha de nacimiento:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:calendar id="usufechanacimiento" 
                                        placeholder="dd/mm/aaaa" pattern="dd/MM/yyyy" 
                                        value="#{usuarioController.selected.usufechanacimiento}" 
                                        title="#{bundleAdmin.EditUsuarioTitle_usufechanacimiento}" 
                                        required="true" 
                                        readonlyInput="true"
                                        requiredMessage="Campo obligatorio" 
                                        showOn="button"
                                        navigator = "true"
                                        locale="es"
                                        maxdate="#{usuarioController.fechaHoy}">
                                <p:ajax event="keyup" update="msgUsuFechaNacimiento"/>
                                <p:ajax event="dateSelect" update="msgUsuFechaNacimiento"/>   </p:calendar>
                        </p:column>

                    </p:row>
                    <p:row> 
                        <p:column>
                        </p:column>
                        <p:column>
                        </p:column>
                        <p:column>
                        </p:column>
                        <p:column>
                            <p:message id="msgUsuFechaNacimiento" for="usufechanacimiento"/>
                        </p:column>
                    </p:row>
                    <p:row>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Email:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:inputText id="usuemail" value="#{usuarioController.selected.usuemail}"
                                         title="#{bundleAdmin.CreateUsuarioTitle_usuemail}" 
                                         required="true" requiredMessage="Campo obligatorio">
                                <f:validator validatorId="ValidarCampoCorreoElectronico"/>
                                <p:ajax event="keyup" update="msgCaracteresEMail"/>
                            </p:inputText>

                        </p:column>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Cargo:" />
                        </p:column>
                        <p:column>
                            <p:selectOneMenu id="carid" value="#{usuarioController.cargo}" >
                                <f:selectItems value="#{cargoController.itemsAvailableSelectOne}"
                                               var="caridItem"
                                               itemValue="#{caridItem}"
                                               itemLabel="#{caridItem.carnombre}"
                                               />
                                <f:validator validatorId="ValidarCamposSeleccionar"/>
                            </p:selectOneMenu>
                        </p:column>

                    </p:row>
                    <p:row> 
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message id="msgCaracteresEMail" for="usuemail"/>
                        </p:column>
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message for="carid"/>
                        </p:column>
                    </p:row>
                    <p:row>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Tipo de usuario:" />
                        </p:column>
                        <p:column>
                            <p:selectOneMenu id="grupoId" value="#{usuarioController.grupo.gruid}" >
                                <p:ajax event="change" update="grupoId"/> 
                                <f:selectItems value="#{grupoController.itemsAvailableSelectOne}"
                                               var="grupo"
                                               itemValue="#{grupo.gruid}"
                                               itemLabel="#{grupo.grudescripcion}"
                                               >

                                </f:selectItems>
                                <f:validator validatorId="ValidarCamposSeleccionar"/>
                            </p:selectOneMenu>
                        </p:column>

                    </p:row>
                    <p:row> 
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message  for="grupoId"/>
                        </p:column>

                    </p:row>
                    <p:row>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Nombre de usuario:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:inputText id="usunombreusuario" value="#{usuarioController.selected.usunombreusuario}" 
                                         title="#{bundleAdmin.CreateUsuarioTitle_usunombreusuario}" required="true" 
                                         requiredMessage="Campo obligatorio">
                                <f:validator validatorId="ValidarCampoNombreUsuario"/>
                                <p:ajax event="keyup" update="msgCaracteresNombreUsuario"/>

                            </p:inputText>


                        </p:column>
                        <p:column>
                            <p:outputLabel style="font-weight:bold;" value="Contraseña:" />
                            <p:outputLabel style="font-style: italic; font-size: 16px; text-align: left; color: red;"  value="* " />
                        </p:column>
                        <p:column>
                            <p:password id="usucontrasena" value="#{usuarioController.selected.usucontrasena}"
                                        title="#{bundleAdmin.CreateUsuarioTitle_usucontrasena}" 
                                        required="true" requiredMessage="Campo obligatorio"/>        
                        </p:column>
                    </p:row>
                    <p:row> 
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message id="msgCaracteresNombreUsuario" for="usunombreusuario"/>
                        </p:column>
                        <p:column>

                        </p:column>
                        <p:column>
                            <p:message for="usucontrasena"/>
                        </p:column>
                    </p:row>
                </p:panelGrid>
                <p:separator/>
                <center>
                    <p:commandButton action="#{usuarioController.registrarUsuario()}"
                                     value="Registrar" update=":UsuarioListForm:datalist, panel2" 

                                     />
                </center>

            </h:form>
        </p:dialog>
    </ui:composition>

</html>




public class UsuarioController implements Serializable {

    @EJB
    private com.unicauca.coordinacionpis.sessionbean.UsuarioFacade ejbUsuario;
    @EJB
    private UsuariogrupoFacade ejbUsuarioGrupo;

    private List<Usuario> items = null;
    private Cargo cargo;
    private Grupo grupo;
    private List<Usuario> filtroBusqueda;

    private boolean campoFoto;
    private boolean campoContrasena;

    private String contrasena;
    private String datoBusqueda;

    private Usuario usuario;
    private UploadedFile file;

    private SimpleDateFormat formatoFecha;


    private byte[] imagen;
    private DefaultStreamedContent miImagen;
    private UploadedFile uploadedFile;

    public StreamedContent getImagenDefecto(){
        return Utilidades.getImagenPorDefecto("foto");
    }
    public StreamedContent getImagen(Usuario usuario) {
        RequestContext requestContext = RequestContext.getCurrentInstance();
        FacesContext context = FacesContext.getCurrentInstance();

        String id = context.getExternalContext().getRequestParameterMap().get("idUsu");
        if (usuario.getUsufoto() == null) {
            return Utilidades.getImagenPorDefecto("foto");
        } else {
            return new DefaultStreamedContent(new ByteArrayInputStream(usuario.getUsufoto()));
        }

    }
    public void establecerFotoPorDefecto()
    {
        System.out.println("Hallo");
        this.miImagen = null;
        RequestContext requestContext = RequestContext.getCurrentInstance();
        //requestContext.execute("PF('UsuarioCreateDialog').hide()");
        //requestContext.execute("PF('UsuarioCreateDialog').show()");
        //this.imagenPorDefecto();
    }
public DefaultStreamedContent getMiImagen() {
    convertirBytesAImagen();
    /*if(miImagen==null)
        miImagen = Utilidades.getImagenPorDefecto("foto");*/
    return miImagen;
}
public void convertirBytesAImagen()
{
    if(imagen != null)
    {
        InputStream is = new ByteArrayInputStream((byte[]) imagen);
        miImagen = new DefaultStreamedContent(is, "image/png");
    }
}