Avoid refresh the whole page after submit - jsf

in the code below there is a form with the name of FormData where every time I submit the data, it updates the entire page. I wish this did not happen when submit the data, it would execute the action q without refreshing the whole page. This behavior is normal or I'm doing something wrong?
My code:
<ui:decorate template="/resources/Template.xhtml">
<ui:define id="content" name="content">
<p:growl id="war"/>
<style type="text/css">
.ok{
color: #336600
}
.erro{
color: #D20005;
}
</style>
<div style="width: 90%; margin-left: auto; margin-right: auto; ">
<br/>
<br/>
<p:panel>
<f:facet name="header">
Lista de Arquivos Armazenados
</f:facet>
<h:form id="pesquisar">
<p:toolbar style="width: 100%;">
<p:toolbarGroup align="left" >
<h:panelGrid columns="1" cellpadding="0">
</h:panelGrid>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<h:panelGrid columns="5" cellpadding="0">
<h:outputLabel value="De: "/>
<p:inputMask mask="99/99/9999" value="#{arquivoBean.dataInicial}" size="10"/>
<h:outputLabel value="Até: "/>
<p:inputMask mask="99/99/9999" value="#{arquivoBean.datafinal}" size="10"/>
<p:commandButton value="Buscar" action="#{arquivoBean.listar()}" ajax="false"/>
<br/>
<p:selectBooleanCheckbox id="check" value="#{arquivoBean.pendente}"
itemLabel="Pendente">
<p:ajax process="#this" event="change" listener="#{arquivoBean.listarPendente()}" />
</p:selectBooleanCheckbox>
</h:panelGrid>
</p:toolbarGroup>
</p:toolbar>
</h:form>
</p:panel>
<br/>
<p:dataTable id="dataTable"
var="Arquivo"
paginator="true"
paginatorPosition="bottom"
rowsPerPageTemplate="100"
rows="100"
sortBy="#{Arquivo.id}"
value="#{arquivoBean.dataModelArquivo}"
rowStyleClass="#{Arquivo.pendente eq 1 ? 'ok' : 'erro'}"
emptyMessage="Você ainda não ativou uma empresa ou não existe postagem para esta Empresa">
<p:column headerText="ID">
#{Arquivo.id}
</p:column>
<p:column headerText="Nome">
#{Arquivo.nomeMury}
</p:column>
<p:column headerText="Envio">
#{Arquivo.dataEnvio}
</p:column>
<p:column headerText="Produto" width="10px;">
<h:form id="formProduto">
<p:commandButton icon="ui-icon-circle-zoomout" value=""
action="#{arquivoBean.listarProdutoPorArquivo()}"
oncomplete="prodDialog.show()"
onclick="listarProd([{name: 'ArquivoId', value:#{Arquivo.id}}]);">
<f:setPropertyActionListener value="#{Arquivo}" target="#{arquivoBean.arquivo}"/>
</p:commandButton>
<p:remoteCommand name="listarProd" action="#{arquivoBean.listarProdutoPorArquivo()}" update=":formDataTable:dataTableProd">
<f:setPropertyActionListener value="#{Arquivo}" target="#{arquivoBean.arquivo}"/>
</p:remoteCommand>
</h:form>
</p:column>
<p:column headerText="Data" width="10px;">
<h:form id="formData">
<p:inputMask id="entrada#{cc.clientId}" mask="99/99/9999" value="#{Arquivo.dataEntrada}"
onkeypress="if (event.keyCode === 13) {
test([{name: 'rowIndex', value:#{Arquivo.id}}]);
return;
}"
size="8">
<f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="GMT-03:00"/>
</p:inputMask>
<p:remoteCommand name="test" action="#{arquivoBean.inserirDataNota()}">
<f:setPropertyActionListener value="#{Arquivo}" target="#{arquivoBean.arquivo}"/>
</p:remoteCommand>
</h:form>
</p:column>
</p:dataTable>
<h:form id="formDataTable">
<p:dialog closeOnEscape="true"
widgetVar="prodDialog"
modal="true"
header="Lista de Produtos da NF-e"
style="width: 300; height: 500"
position="center">
<p:dataTable
id="dataTableProd"
var="XmlItens"
paginator="true"
paginatorPosition="bottom"
rowsPerPageTemplate="10"
rows="10"
value="#{arquivoBean.listaProd}">
<p:column headerText="ID">
#{XmlItens.id}
</p:column>
<p:column headerText="Nome">
#{XmlItens.descricaoProd}
</p:column>
<p:column headerText="Envio">
#{XmlItens.chaveNfe}
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
</div>
</ui:define>
</ui:decorate>

First: The method on your managedBean must be void or return a String null
Second: you must write which ones components do you want to update after de action works.
Like primefaces example:
https://www.primefaces.org/showcase/ui/ajax/remoteCommand.xhtml

Related

Refresh dialog in primefaces

I am building an application where it is necessary to register a user, more precisely a picture for a user besides his name, username and some other information, when the registration window is show, a default user image is load, then when they select a new image the default image dissapear and the selected one is displayed on the window, and a new button is displayed as well, this button allows the user to remove the selected picture, so the default image must be display again, but I still can't display again the default picture in case de button is clicked to return to the default picture and remove the selected one
View where users are listed and the modal window is displayed
<?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>
User dialog window
<?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="  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>
User controller
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");
}
}
}
The method I am calling to set the default picture is establecerFotoPorDefecto()

Calling two dialog and save in two methods in JSF

I have two buttons and two dialog, each button calls a dialog, each dialog has a save button, you send two different methods in the Bean. The problem is that it only works sending a dialog and not the other.
xhtml
<h:form id='form1'>
<p:panel id="basic" header="#{usuarioBean.nompagina}" footer="" style="margin-bottom:20px">
<p:panelGrid columns="3" style="width: 100%">
<p:commandButton value="Nuevo" icon="ui-icon-document" actionListener="#{menuBean.setAccion('Registrar')}" type="button" onclick="PF('dlg').show();" update=":dialog"/>
</p:panelGrid>
.......
<p:column headerText="Acción">
<p:commandButton value="Asignar Rol" actionListener="#{usuarioBean.leerUsuario(rowusu)}" oncomplete="PF('wdatosvar').show()" update=":wdatosid" icon="ui-icon-person"/>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
<p:dialog position="center top" styleClass="ui-widget-container" id="dialog" header="Usuarios" widgetVar="dlg" dynamic="true" modal="true" width="400">
<h:form>
<p:panelGrid columns="2">
...
<p:commandButton value="Guardar" actionListener="#{usuarioBean.inUsuario()}" oncomplete="handleDialogSubmit2(args)" update=":form1:listusuario" icon="ui-icon-check" />
<p:commandButton value="Cancelar" immediate="true" onclick="PF('dlg').hide();" icon="ui-icon-cancel" />
<p:outputLabel id="refresc" />
</p:panelGrid>
</h:form>
</p:dialog>
<p:dialog header="Datos" position="center top" widgetVar="wdatosvar" id="wdatosid" modal="true" showEffect="explode" hideEffect="explode">
<h:form>
<h:panelGrid columns="2">
...
<p:commandButton value="Guardar" actionListener="#{usuarioBean.saveUsuario()}" oncomplete="handleDialogSubmit(xhr, status, args)" update=":form1:listusuario,#form,refrescar" icon="ui-icon-check" />
<p:commandButton value="Cancelar" immediate="true" onclick="PF('wdatosvar').hide();" icon="ui-icon-cancel" />
<p:outputLabel id="refrescar" />
</h:panelGrid>
</h:form>
</p:dialog>
And usuarioBean.java
#ManagedBean
#SessionScoped
public class usuarioBean {
public void saveUsuario() throws Exception {
usuariohistorialDAO dao = new usuariohistorialDAO();
try {
dao.insertCredencial(usuariohis,value1);
this.listarUsuarios(palabra);
} catch (Exception e) {
throw e;
}
}
public void inUsuario() throws Exception{
usuariohistorialDAO dao = new usuariohistorialDAO();
try {
dao.insertarUsuario(usuariohis);
this.listarUsuarios(palabra);
} catch (Exception e) {
throw e;
}
}
}
inUsuario does no work.
Do not know exactly why but this form solves my problem
<h:form id='form1'>
<p:panel id="basic" header="Lista de Usuarios" footer="" style="margin-bottom:20px">
<p:panelGrid columns="3" style="width: 100%">
<p:commandButton value="Nuevo" icon="ui-icon-document" oncomplete="PF('dlg').show()" update=":dialog"/>
</p:panelGrid>
<p:inputText value="#{usuarioBean.palabra}" id="search" class="inputmediano"/>
<p:commandButton value="Buscar" icon="ui-icon-refresh" actionListener="#{usuarioBean.bucarUsuario()}" update="listusuario"/>
<p:dataTable tableStyleClass="ui-table-columntoggle" var="rowusu" value="#{usuarioBean.arrayusu}" paginator="true" paginatorPosition="bottom" rows="30" id="listusuario" style="width: 100%;margin-top: 10px" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
<p:column headerText="Id" style="width: 25px">
<h:outputText value="#{rowusu.ush_id}"/>
</p:column>
<p:column headerText="Usuario" >
<h:outputText value="#{rowusu.usu_nombre}"/>
</p:column>
<p:column headerText="Sexo" >
<h:outputText value="#{rowusu.usu_sexo}"/>
</p:column>
<p:column headerText="Nick">
<h:outputText value="#{rowusu.ush_correo}" />
</p:column>
<p:column headerText="Rol">
<h:outputText value="#{rowusu.nomrol}"/>
</p:column>
<p:column headerText="Cargo">
<h:outputText value="#{rowusu.nomcargo}"/>
</p:column>
<p:column headerText="Acción">
<p:commandButton value="Asignar Rol" actionListener="#{usuarioBean.leerUsuario(rowusu)}" oncomplete="PF('wdatosvar').show()" update=":wdatosid" icon="ui-icon-person"/>
<p:commandButton value="Modificar" actionListener="#{usuarioBean.leerUsuario(rowusu)}" oncomplete="PF('dlg').show()" update=":dialog" icon="ui-icon-person"/>
</p:column>
</p:dataTable>
</p:panel>
</h:form>

How can i hide the submit button if record not found

I want to disable or hide the commandbutton if no record is found.
I have gooogled but could not find the solution.
Here is the code:
<p:column>
<div style="overflow: auto; width: 100%;">
<p:dataTable var="tPreferences"
value="#{userPreferences.preferences}"
emptyMessage="No Questions Found." id="pTable" styleClass="borderless">
<p:column headerText="PREFERENCES">
<h:outputText id="sName" styleClass="cellLabelMand"
value="#{tPreferences.shortText}" />
<h:outputText value="<br/><br/>" escape="false" />
<h:selectManyCheckbox id="grid"
value="#{tPreferences.preferencesSelectedItem}"
layout="grid" columns="1">
<f:selectItems value="#{tPreferences.catList}" var="pref" />
</h:selectManyCheckbox>
</p:column>
</p:dataTable>
</div>
</p:column>
CommandButton:
<h:commandButton value="Submit" id="btnUserInfo"
onclick="return openUpdateDialog();"
actionListener="#{userPreferences.saveUserPreferences}"
styleClass="richButtonSave" style="background:green;"
disabled="#{empty pTable.tPreferences}" />

Primefaces pagination (lazydatamodel) load method

I´ve a couple issues with a page I´m working on.
I have two sections: frmConf and frmData.
The first one has some parameters I use for searching purposes.
The second one has a DataTable defined as lazy and algo I have it´s corresponding backing wich extends LazyDatamodel.
In the mentioned DataTable in section 2 I have a column with a commandLink which creates a PDF document for the selected row in the DataTable.
The problem I´m facing is it works just fine the first time I load the page:
It calls the load (#override) method from LazyDatamodel and presents the first 10 records of the query results from the DB.
Then, when I click on the commandLink column it shows the "save as" dialog for the corresponding PDF just fine and I can proceed to download the file.
But then, for some reason wich I don´t yet understand, if I click another row´s PDF commandLink it goes and calls the referred load method a requeries the DB assuming I´m trying to do some pagination and it doesn´t even generate the required PDF.
What I´m trying to achieve is just load the page for every pagination case and not for any unrelated event like clicking the PDF button for the selected row.
Why is it reloading and requerying (even though it shows the same results as the indexes for pagination haven´t change) the entire page content after the first (correct)PDF generation?
It´s my guess something happens after the first PDF generation (it leaves the page with some "reload required" state.
I´m leaving the markup from the page as well as the corresponding backing bean PDF generation method.
Please I´d really appreciate if someone could help me with this.
Thanks!
JSF markup:
<!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://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/templates/cimaTemplate.xhtml">
<ui:define name="tituloPagina">
<h:outputText value="Consulta Documentos" />
</ui:define>
<ui:define name="tituloFormulario">
<h:outputText value="Documentos" styleClass="titulo" />
</ui:define>
<ui:define name="contenido">
<style>
.style1 {
text-align: right;
}
.style3 {
text-align: left;
}
.style2 {
text-align: center;
background: blue;
color: white;
font-weight: bold;
}
.colEstadoStyle {
td:nth-child(1)
width: 20px;
}
.imageClass {
display: block;
background-image: url('/imagenes/pdf.png') no-repeat 100%;
}
</style>
<h:form id="frmConf" styleClass="form" >
<p:growl id="growl" showDetail="true" sticky="true" />
<p:panel id="datosEmisorPanel">
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
<p:panelGrid style="margin: 0 auto;" id="panelG">
<p:row>
<p:column>
<p:panelGrid>
<p:row>
<p:column style="text-align: center;" colspan="2">
<strong><h:outputLabel styleClass="label" value="Seleccionar Archivo" /></strong>
<p:selectManyCheckbox style="text-align: center;"
value="#{cabDocumentoMB.selectedOptionsEmail}">
<f:selectItem itemValue="PDF" itemLabel="PDF" />
<f:selectItem itemValue="XML" itemLabel="XML" />
</p:selectManyCheckbox>
</p:column>
</p:row> <p:row>
<p:column colspan="2">
<strong><h:outputLabel styleClass="label"
value="E-Mails" /></strong>
<br></br>
<h:inputTextarea value="#{cabDocumentoMB.correos}"
cols="40" />
<br></br>
</p:column>
</p:row> <p:row>
<p:column colspan="2">
<strong><h:outputLabel styleClass="style1"
value="Formato: email1#email.com,email2#email.com" /></strong>
</p:column>
</p:row> <p:row>
<p:column rowspan="2">
<p:commandButton icon="ui-icon-mail-closed"
value=" Envio normal" id="bto_enviarEmail"
oncomplete="bloquearPagina.hide()"
onstart="bloquearPagina.show()"
action="#{cabDocumentoMB.EnviarCorreos('Normal')}"
update="growl">
</p:commandButton>
<p:blockUI block="frmConf" widgetVar="bloquearPagina">
Enviando correo...<br />
<p:graphicImage value="/imagenes/ajax-loader.gif" />
</p:blockUI>
<p:blockUI block="frmConf" widgetVar="bloquearReproceso">
Reprocesando...<br />
<p:graphicImage value="/imagenes/ajax-loader.gif" />
</p:blockUI>
</p:column>
<p:column rowspan="2">
<p:commandButton value=" Envio ZIP" icon="ui-icon-tag"
action="#{cabDocumentoMB.EnviarCorreos('ZIP')}"
oncomplete="bloquearPagina.hide()"
onstart="bloquearPagina.show()" update="growl">
</p:commandButton>
<br />
</p:column>
</p:row> </p:panelGrid>
</p:column>
<p:column colspan="0">
<p:panelGrid> <p:row>
<p:column colspan="1" styleClass="style1">
<strong><h:outputLabel styleClass="label" size="30"
value="Cédula/RUC/Pasaporte" /></strong>
</p:column>
<p:column colspan="1" styleClass="style3">
<h:inputText styleClass="text" style="font-weight: bold;"
value="#{cabDocumentoMB.ruc}" />
</p:column>
</p:row> <p:row>
<p:column colspan="1" styleClass="style1">
<strong><h:outputLabel styleClass="label" size="30"
value="Nombres:" /></strong>
</p:column>
<p:column colspan="1" styleClass="style3">
<h:inputText styleClass="text" style="font-weight: bold;"
value="#{cabDocumentoMB.razonSocial}" />
</p:column>
</p:row> <p:row>
<p:column styleClass="style1">
<strong><h:outputLabel styleClass="label"
value="Número del Documento:" /></strong>
</p:column>
<p:column styleClass="style3">
<h:inputText value="#{cabDocumentoMB.numDocumento}"
size="30" title="Número del Documento" placeHolder="TBD"/>
</p:column>
</p:row> <p:row>
<p:column styleClass="style1">
<strong><h:outputLabel styleClass="label"
value="Tipo de Documento:" /></strong>
</p:column>
<p:column styleClass="style3">
<p:selectOneMenu
value="#{cabDocumentoMB.seleccionTipo}">
<f:selectItems value="#{cabDocumentoMB.tipo}" />
</p:selectOneMenu>
</p:column>
</p:row> <p:row>
<p:column styleClass="style1">
<strong><h:outputLabel styleClass="label"
value="Estados:" /></strong>
</p:column>
<p:column styleClass="style3">
<p:selectOneMenu
value="#{cabDocumentoMB.seleccionTipoEstado}">
<f:selectItems value="#{cabDocumentoMB.tipoEstados}" />
</p:selectOneMenu>
</p:column>
</p:row> <p:row>
<p:column>
<strong><h:outputLabel styleClass="label"
value="Fecha Inicial:" /></strong>
<br></br>
<p:calendar id="txt_inicial"
value="#{cabDocumentoMB.fechaInicio}"
pattern="yyyy-MM-dd" mask="true" mode="popup" showOn="button"
readonlyInput="true">
<f:convertDateTime type="date" dateStyle="short"
pattern="yyyy-MM-dd" />
</p:calendar>
</p:column>
<p:column>
<strong><h:outputLabel styleClass="label"
value="Fecha Final:" /></strong>
<br></br>
<p:calendar id="txt_final"
value="#{cabDocumentoMB.fechaFinal}"
pattern="yyyy-MM-dd" mask="true" mode="popup" showOn="button"
readonlyInput="true">
<f:convertDateTime type="date" dateStyle="short"
pattern="yyyy-MM-dd" />
</p:calendar>
</p:column>
</p:row> <p:row>
<p:column style="text-align: center;">
<p:commandButton value=" Busqueda " icon="ui-icon-search"
title="Buscar Filtrado"
action="#{cabDocumentoMB.findDocumentos()}"
update=":frmData:listaDocumentos,:frmConf:datosEmisorPanel">
</p:commandButton>
</p:column>
<p:column>
<p:commandButton value="Reprocesar documentos "
icon="ui-icon-tag"
action="#{CabDocumentoMB.reprocesarDocumentos()}"
disabled="#{CabDocumentoMB.botonReprocesarActivo}"
update=":frmData:listaDocumentos,:frmConf:datosEmisorPanel">
</p:commandButton>
<br />
</p:column>
</p:row> </p:panelGrid>
</p:column>
</p:row>
</p:panelGrid>
</p:panel>
</h:form>
<h:form id="frmData" styleClass="form">
<p:panel id="datosDetalle22" >
<h:panelGroup id="listaDocumentos">
<p:dataTable id="lazyDataTable"
var="documento"
value="#{cabDocumentoMB.allDocumentos}"
paginator="true" rows="10" rowsPerPageTemplate="10,50,100"
selection="#{cabDocumentoMB.seleccionDocu}"
update=":frmData:listaDocumentos"
lazy="true">
<f:facet name="header">
Consulta de Documentos
</f:facet>
<p:column headerText="Identificación" style="width:10% ; font-size:11px" >
<h:outputText value="#{documento.identificacionComprador}" style="font-size:11px;" />
</p:column>
<p:column headerText="Razón Social" style="width:25% ; font-size:11px">
<h:outputText value="#{documento.razonSocialComprador}" style="font-size:11px;" />
</p:column>
<p:column headerText="Comprobante" style="width:10% ; font-size:11px">
<h:outputText value="#{documento.codigoDocumento}" style="font-size:11px;" />
</p:column>
<p:column headerText="Número" style="width:10% ; font-size:11px">
<h:outputText value="#{documento.id.serie}" style="font-size:11px;" />
</p:column>
<p:column headerText="Importe total" style="width:7% ; text-align:right ; font-size:11px">
<h:outputText value="#{documento.importeTotal}" style="font-size:11px;" />
</p:column>
<p:column headerText="Fecha Emisión" style="width:7% ; text-align:center ; font-size:11px">
<h:outputText value="#{documento.fechaEmision}" style="font-size:11px;" />
</p:column>
<p:column headerText="Ambiente"
style="width:10% ; text-align:center ; font-size:11px">
<h:outputText value="#{documento.id.ambiente}" style="font-size:11px;" />
</p:column>
<p:column headerText="Estado" style="width:20% ; font-size:11px">
<p:row>
<p:column>
<h:outputText value="#{documento.estadoTransaccion}" style="font-size:11px;" />
</p:column>
<p:column>
<p:commandButton update=":frmData:display" oncomplete="detalleEstadoDiag.show()" icon="ui-icon-search" style="float:right;">
<f:setPropertyActionListener
target="#{cabDocumentoMB.seleccionDocumentos}"
value="#{documento}"
/>
</p:commandButton>
</p:column>
</p:row>
</p:column>
<p:column headerText="PDF" style="font-size:11px" >
<p:commandLink action="#{cabDocumentoMB.pdf(documento,'')}"
ajax="false"
disabled="#{CabDocumentoMB.desactivaBotonPDF}"
update=":frmData:datosDetalle22">
<p:graphicImage value="/imagenes/pdf.png" ></p:graphicImage>
<f:setPropertyActionListener
target="#{cabDocumentoMB.documentos}"
value="#{documentos}" >
</f:setPropertyActionListener>
</p:commandLink>
</p:column>
<p:column headerText="XML" style="font-size:11px" >
<p:commandLink
action="#{cabDocumentoMB.xml(documento)}"
ajax="false"
update=":frmData:datosDetalle22"
disabled="#{CabDocumentoMB.desactivaBotonXML}">
<p:graphicImage value="/imagenes/xml.png"></p:graphicImage>
<f:setPropertyActionListener
target="#{cabDocumentoMB.documentos}"
value="#{documentos}">
</f:setPropertyActionListener>
</p:commandLink>
</p:column>
<p:column selectionMode="multiple"/>
</p:dataTable>
<p:dialog header="Detalle de estado" widgetVar="detalleEstadoDiag" resizable="false" width="400" showEffect="explode" hideEffect="explode" style="font-size:11px" >
<h:panelGrid id="display" columns="2" cellpadding="4">
<div align="left" style="font-size:11px;"><h:outputText value="Descripción: " style="font-weight:bold" /></div>
<h:outputText value="#{cabDocumentoMB.seleccionDocumentos.msjError}" />
</h:panelGrid>
</p:dialog>
</h:panelGroup>
</p:panel>
<p:panel id="datosExcel" style="align=center">
<h:commandLink>
<p:graphicImage value="/imagenes/excel.png" />
<p:dataExporter type="xls"
postProcessor="#{manager.postProcessXLS}" target="myData"
fileName="myexcel" />
</h:commandLink>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</html>
Backing: (PDF Method)
...
JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(detallesAdiciones);
String reportPath = pathReports.get(doc.getId().getCodigoDocumento());
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(reportPath, obtenerMapaParametrosReportes(obtenerParametrosInfoTriobutaria(doc), obtenerInfoFactura(lstFactDetAdictDocumento,doc)), beanCollectionDataSource);
} catch (JRException e) {
e.printStackTrace();
}
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.addHeader("Content-disposition", "attachment; filename="+name);
ServletOutputStream servletOutputStream = null;
try {
servletOutputStream = httpServletResponse.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
} catch (JRException e) {
e.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();

Problems updating a DataTable in primefaces

I am having trouble updating components in primefaces. Here is one example:
<h:form>
<p:panel style="width: 350px;" header="Partial Process">
<p:dataTable id="tablaPersonas" var="per" value="#{manejador.lista}">
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Nombre" />
</f:facet>
<h:outputText value="#{per.nombre}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Apellido" />
</f:facet>
<h:outputText value="#{per.apellido}" />
</p:column>
<p:column headerText="Editar" style="text-align: center;">
<p:commandButton value="Editar"/>
</p:column>
</p:dataTable>
</p:panel>
<p:commandButton value="Abrir" onclick="widgetDlgAgregar.show();"/>
<p:dialog header="Agregar" widgetVar="widgetDlgAgregar" width="250" height="150" closable="true">
<h:panelGrid id="gridAdd" columns="2">
<h:outputLabel value="Nombre:"/>
<p:inputText value="#{manejador.auxiliarAgregar.nombre}"/>
<h:outputLabel value="Apellido:"/>
<p:inputText value="#{manejador.auxiliarAgregar.apellido}"/>
<p:commandButton oncomplete="widgetDlgAgregar.hide();" update="tablaPersonas,gridAdd" value="Agregar" actionListener="#{manejador.agregarPersona}"/>
</h:panelGrid>
</p:dialog>
</h:form>
As you see, I click on a CommandButton called "Abrir" and a Dialog opens with "Agregar" as title. I fill in the input boxes and when I click the CommandButton "Agregar", the DataTable isn't updated. Why is this happening?
Oh sorry i think you forgot this update
try this it should work
<h:form prependId="false">
<p:panel style="width: 350px;" header="Partial Process">
<p:dataTable id="tablaPersonas" var="per"
value="#{manejador.lista}">
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Nombre" />
</f:facet>
<h:outputText value="#{per.nombre}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Apellido" />
</f:facet>
<h:outputText value="#{per.apellido}" />
</p:column>
<p:column headerText="Editar" style="text-align: center;">
<p:commandButton value="Editar" />
</p:column>
</p:dataTable>
</p:panel>
<p:commandButton value="Abrir" onclick="widgetDlgAgregar.show();" update="gridAdd" />
<p:dialog header="Agregar" widgetVar="widgetDlgAgregar" width="250"
height="150" closable="true">
<h:panelGrid id="gridAdd" columns="2">
<h:outputLabel value="Nombre:" />
<p:inputText value="#{manejador.auxiliarAgregar.nombre}" />
<h:outputLabel value="Apellido:" />
<p:inputText value="#{manejador.auxiliarAgregar.apellido}" />
<p:commandButton oncomplete="widgetDlgAgregar.hide();"
update="tablaPersonas,gridAdd" value="Agregar"
actionListener="#{manejador.agregarPersona}" />
</h:panelGrid>
</p:dialog>
</h:form>
try to put your
<p:dialog header="Agregar" widgetVar="widgetDlgAgregar" width="250" height="150" closable="true">
outside the form and add prependId="false" to your form <h:form prependId="false" >

Resources