I am showing data in a <p:dataTable>, but it shows like this
The view markup is straightforward:
<h:form>
<p:dataTable id="campaignSummaryTable" var="mout" value="#{campaignSummarySearchRes.summaryList}" height="500" scrollable="true" >
<p:column>
<f:facet name="header"><h:outputText value="Campaign Code"/></f:facet>
<h:outputText value="#{mout.shortCode}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Message"/></f:facet>
<h:outputText value="#{mout.message}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Option 1"/></f:facet>
<h:outputText value="#{mout.option1}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Option 2"/></f:facet>
<h:outputText value="#{mout.option2}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Option 3"/></f:facet>
<h:outputText value="#{mout.option3}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Option 4"/></f:facet>
<h:outputText value="#{mout.option4}"/>
</p:column>
<p:column>
<f:facet name="header"><h:outputText value="Other"/></f:facet>
<h:outputText value="#{mout.other}"/>
</p:column>
</p:dataTable>
</h:form>
How I can solve this issue? The header and the content should have the same column width.
Add a style="width:125px" attribute to your columns so they look like this one:
<p:column headerText="Campaign Code" style="width:125px">
<h:outputText value="#{mout.shortCode}" />
</p:column>
I also put the header as an attribute of column. I dont know if thats neccessary, but it looks better.
See also PF Showcase
What version do you use?
You do not have to put a facet in a column; each column has a headerText attribute. Look at this: http://www.primefaces.org/showcase-labs/ui/datatableComplex.jsf.
Related
I'm using <p:rowEditor> as follows:
<p:column headerText="Libellé">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{lot.libelle}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{lot.libelle}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:rowEditor />
</p:column>
I would like to show a confirm message before the <p:rowEditor> updates the model on click of the "OK" button. How can I achieve this?
You can use onstart attribute of <p:ajax event="rowEdit"> for this.
<p:dataTable ...>
<p:ajax event="rowEdit" onstart="return confirm('Are you sure?')" />
...
</p:dataTable>
I have this autocomplete component below that works outside the datatable but it doesn't work inside it
I don't see the cause :
<p:dataTable id="table" var="car" editable="true" editMode="cell"
widgetVar="carsTable" rowKey="#{car.idarticleFourniseur}"
value="#{articlesMB.listarticlefournisseurs}" rows="3">
<p:ajax event="cellEdit" listener="#{articlesMB.onCellEdit}"
update=":messages" />
<p:column headerText="Id">
<h:outputText value="#{car.idarticleFourniseur}" />
</p:column>
<p:column headerText="Nom">
<h:outputText value="#{car.libelle}" />
</p:column>
<p:column headerText="Fournisseur">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{car.fournisseur.personne.nom}" />
</f:facet>
<f:facet name="input">
<p:autoComplete id="dfdd" var="p" itemLabel="#{p.personne.nom}"
itemValue="#{p}" dropdown="true" process="#this"
value="#{articlesMB.selectedFournisseur}"
forceSelection="true" converter="#{fournisseursConverter}"
completeMethod="#{articlesMB.complete}">
<p:column>
#{p.personne.nom} - #{p.personne.prenom}
</p:column>
</p:autoComplete>
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
<p:autoComplete id="dfd" var="p" itemLabel="#{p.personne.nom}"
itemValue="#{p}" dropdown="true" process="#this"
value="#{articlesMB.selectedFournisseur}" forceSelection="true"
converter="#{fournisseursConverter}"
completeMethod="#{articlesMB.complete}">
<p:column>
#{p.personne.nom} - #{p.personne.prenom}
</p:column>
</p:autoComplete>
the second autocomplete works fine, but the first (in datatable) doesn't work (the completion does not appear)
do you have any idea
thank you in advance
Instead of celleditor you can use inplace
<p:inplace editor="true" label="#{contactRole.userDto.fullContactData}" emptyLabel="#{msgs['constructionSite.text.contact']}">
<p:autoComplete value="#{contactRole.userDto}"
id="contact1" completeMethod="#{assignContactBean.completeContacts}"
var="c" itemLabel="#{c.fullContactData}" itemValue="#{c}"
converter="#{assignContactBean}" forceSelection="true" scrollHeight="200"/>
</p:inplace>
I'm using a p:dataTable to display a list of objects and I would like to order them by their Date property in a descending manner here is the code:
<h:form id="receivablesForm">
<p:dataTable id="receivablesTable" value="#{receivableManager.overdueReceivables}" var="receivable" rows="18" emptyMessage="#{msg['warning.noData']}" style="width: 585px;" sortBy="#{receivable.dueDate}" sortOrder="descending">
<p:column sortBy="#{receivable.invoice.number}" styleClass="fixedSizeColumnSmall">
<f:facet name="header">
<h:outputText value="#{msg['label.number']}" />
</f:facet>
<h:outputText value="#{receivable.invoice.number}-#{receivable.number}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{msg['label.clientName']}" />
</f:facet>
<h:outputText value="#{receivable.invoice.client.person.name}" />
</p:column>
<p:column styleClass="fixedSizeColumn">
<f:facet name="header">
<h:outputText value="#{msg['label.dueDate']}" />
</f:facet>
<h:outputText value="#{receivable.dueDate}" style="#{receivableManager.isOverdue(receivable) ? 'color: red' : ''}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{msg['label.amount']}" />
</f:facet>
<h:outputText value="#{receivable.amount}">
<f:convertNumber type="currency" locale="pt_br" />
</h:outputText>
</p:column>
</p:dataTable>
</h:form>
However the objects are not being ordered at all. Is it possible to order by a Date property in a descending manner using the sortBy and sortOrder properties?
Call a method of backingbean when finished filtering the table ends. Using Primefaces, datatable look like this:
<p:dataTable id="tabla_gral" rendered="#{consumoMaterial.verTabla}" var="item" paginator="true" rows="15" rowKey="#{item.no}" value="#{consumoMaterial.listadoConsumo}" filteredValue="#{consumoMaterial.listadoConsumoFiltered}">
<p:ajax event="filter" listener="#{consumoMaterial.actualizarSaldos}" update=":form2:tabla_gral" />
<f:facet name="header">
<h:outputText value="Búsqueda de Consumo por: #{consumoMaterial.tipoBuscar}: '#{consumoMaterial.codigo}'" />
</f:facet>
<p:column exportable="#{consumoMaterial.no}" rendered="#{consumoMaterial.no}" id="cclave" sortBy="#{item.no}" filterBy="#{item.no}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Nro" />
</f:facet>
<h:outputText value="#{item.no}" />
</p:column>
<p:column exportable="#{consumoMaterial.centroCosto}" rendered="#{consumoMaterial.centroCosto}" id="cconcepto" sortBy="#{item.centroCosto}" filterBy="#{item.centroCosto}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Centro de Costo" />
</f:facet>
<h:outputText value="#{item.centroCosto}" />
</p:column>
<p:column exportable="#{consumoMaterial.codigoAlmacen}" rendered="#{consumoMaterial.codigoAlmacen}" id="ctipo" sortBy="#{item.codigoAlmacen}" filterBy="#{item.codigoAlmacen}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Almacén" />
</f:facet>
<h:outputText value="#{item.codigoAlmacen}" />
</p:column>
</p:dataTable>
ajax event="filter" does not work because is while filtering not when it finish.
You can: in filter event, you call JavaScript function in oncomplete or onsuccess(it depend on your target), the JavaScript function will fire click event to commandbutton, and you put action code you want to that commandbutton:
<h:form id="form">
<script type="text/javascript">
function test(){
$(PrimeFaces.escapeClientId('form:btn')).click();
}
</script>
<p:commandButton style="display:none !important" id="btn" oncomplete="alert('ab');" value="SB"/>
<p:dataTable var="carr" value="#{tabview.l1}" id="carList" >
<p:ajax event="filter" oncomplete="test();"/>
<p:column filterMatchMode="contains" filterBy="#{carr.model}" headerText="Model" style="width:30%">
<h:outputText value="#{carr.model}" />
</p:column>
<p:column headerText="MANUFAC" style="width:20%">
<h:outputText value="#{carr.manufacturer}" />
</p:column>
</p:dataTable>
</h:form>
line seperation (dynamically ) missing between rows in datatable in primefaces, just look in this image( i can`t able to upload image here)
http://i.stack.imgur.com/tvzZ3.png
<h:form>
<p:dataTable id="messageTable" var="mout" value="#{messageOutController.items}" rows="25" scrollable="true" height="150">
<p:column style="width:150px"><f:facet name="header">ID</f:facet><h:outputText value="#{mout.messageId}"/> </p:column>
<p:column style="width:150px" ><f:facet name="header">Recepient</f:facet> <h:outputText value="#{mout.smsRecipient}"/> </p:column>
<p:column style="width:50px" ><f:facet name="header">Language</f:facet><h:outputText value="#{mout.smsLanguage}"/> </p:column>
<p:column style="width:150px" ><f:facet name="header">Message</f:facet><h:outputText value="#{mout.smsMessage}"/> </p:column>
<p:column style="width:50px" ><f:facet name="header">Status</f:facet><h:outputText value="#{mout.smsStatus}"/> </p:column>
<p:column style="width:100px"><f:facet name="header">Application ID</f:facet> <h:outputText value="#{mout.applicationId}"/> </p:column>
<p:column style="width:150px"><f:facet name="header">Created</f:facet> <h:outputText value="#{mout.creationTime}"><f:convertDateTime pattern="MM/dd/yyyy HH:mm:ss" /></h:outputText> </p:column>
<p:column style="width:100px"> <p:commandLink ajax="false" value="View" action="#{messageOutController.prepareView()}"/> </p:column>
</p:dataTable>