I have such toggler in dataTable with group columns:
<p:dataTable id="tbl">
<f:facet name="header">
<p:commandButton id="toggler_trigger" type="button"/>
<p:columnToggler id="column_toggler" datasource="tbl" trigger="toggler_trigger">
<p:ajax event="toggle" listener="#{viewModel.onToggle}" />
</p:columnToggler>
</f:facet>
<p:columnGroup type="header">
<p:row>
<p:column colspan="3" headerText="group of 3 columns" />
</p:row>
<p:row>
<p:column headerText="1 column" />
<p:column headerText="2 column" />
<p:column headerText="3 column" />
</p:row>
</p:columnGroup>
<p:column>
<h:outputText value="value 1" />
</p:column>
<p:column>
<h:outputText value="value 2" />
</p:column>
<p:column>
<h:outputText value="value 3" />
</p:column>
</p:dataTable>
How could I exclude group column with name "group of 3 columns" from toggler list? I want it consist only from three usual columns with colspan 1.
A p:column has a toggleable attribute which you can set to false to have a column not show up in the toggler. See page 112 of the 6.2 docs. It might very well also work for a p:columnGroup (although the documentation does not state this)
Related
I am developing web using PrimeFaces 6.0 components. On
<p:dataTable> component when we set scrollable="true" option, columns headers alignment goes wrong.
Following is my code snippet:
<p:fieldset legend="Machine Test Match" id="panel233" toggleable="true" toggleSpeed="500" >
<!--<p:panel id="panel233" header=" Machine Test Match" style="height:325px;border: none">-->
<p:dataTable id="testmatchtable" var="testMatchvalues" value="#{manufactureBean.listTestMatchata}" filteredValue="#{manufactureBean.filteredManufacture}" editable="true"
styleClass="mystyle" tableStyle="table-layout:auto;width:100% important!;" rowKey="#{testMatchvalues.testId}" scrollRows="10" scrollable="true" scrollHeight="230" rows="40" liveScroll="true" selection="#{manufactureBean.testMatchModel}" selectionMode="single" resizableColumns="true" >
<p:column headerText="Test ID" filterBy="#{testMatchvalues.testId}" filterMatchMode="contains" style="width:35px">
<h:outputText value="#{testMatchvalues.testId}" />
</p:column>
<p:column headerText="Test Desc" filterBy="#{testMatchvalues.testDesc}" filterMatchMode="contains" style="width:35px" >
<h:outputText value="#{testMatchvalues.testDesc}" />
</p:column>
<p:column headerText="Specimen Desc" filterBy="#{testMatchvalues.specimenDesc}" filterMatchMode="contains" style="width:35px" >
<h:outputText value="#{testMatchvalues.specimenDesc}" />
</p:column>
<p:column headerText="Path Test Desc" filterBy="#{testMatchvalues.pathTestDesc}" filterMatchMode="contains" style="width:35px">
<h:outputText value="#{testMatchvalues.pathTestDesc}" />
</p:column>
<p:column headerText="Path Param Name" style="width:35px" filterBy="#{testMatchvalues.parameterName}" filterMatchMode="contains">
<h:outputText value="#{testMatchvalues.parameterName}" />
</p:column>
<p:column headerText="Additional Factor" style="width:35px" >
<h:outputText value="#{testMatchvalues.additionFactor}" />
</p:column>
<p:column headerText="Multiply Factor" style="width:35px">
<h:outputText value="#{testMatchvalues.multiplyFactor}" />
</p:column>
<p:column headerText="Machine Host Code" style="width:35px">
<h:outputText value="#{testMatchvalues.machineHostCode}" />
</p:column>
<p:column headerText="Active" style="width:35px">
<h:outputText value="#{testMatchvalues.active}" />
</p:column>
</p:dataTable>
<!--</p:panel>-->
</p:fieldset>
Code taken from https://www.primefaces.org/showcase/ui/data/datatable/basic.xhtml
Attached image shows the problem clearly as column headers and data is not aligned properly.
Image link
For p:column, width="4%" works for me rather than using '4px'
On selecting a row, I need to update the page which is in ui:insert of p:dialog. What my issue is when the page is loaded I can select the row and fetch the data. After selection of another row, I am not able to fetch. There is no action going on.
This is my dataTable
<p:ajax event="rowSelect" update="samples" />
<p:ajax event="rowUnselect" update="samples" />
<p:column headerText="SNo" style="width:20px;" >
#{rowIndex+1}
</p:column>
<p:column headerText="PatientId">
#{patServ.patientOrder.patientEpisode.patientRegistration.patientId}
</p:column>
<p:column headerText="Patient Name" >
#{patServ.patientOrder.patientEpisode.patientRegistration.firstName} #{patServ.patientOrder.patientEpisode.patientRegistration.lastName}
</p:column>
<p:column headerText="Visit ID">
#{patServ.patientOrder.patientEpisode.id}
</p:column>
<p:column headerText="Order ID">
#{patServ.patientOrder.id}
</p:column>
<p:column headerText="Barcode ID" >
<p:outputLabel value="#{resultEntryBean.getBarcodes(patServ.id)}" />
</p:column>
<p:column headerText="Department Name" >
#{loginBean.getSpecialityName( patServ.serviceLabData.serviceHeaderData.speciality )}
</p:column>
<p:column headerText="Service Name" >
#{patServ.serviceLabData.serviceHeaderData.serviceName}
</p:column>
<p:column headerText="Ordered Date">
<p:outputLabel value="#{patServ.createdOn}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a" type="date" timeZone="IST" />
</p:outputLabel>
</p:column>
<p:column headerText="Status">
<p:outputLabel value="#{resultEntryBean.status == 3 ? 'Acknowledged': resultEntryBean.status == 5 ? 'Result Entered': resultEntryBean.status == 6 ? 'Result Authorized' : 'Result Deauthorized'}" />
</p:column>
<p:column>
<p:commandButton value="Print" icon="ui-icon-print" update="reportContent" disabled="#{empty resultEntryBean.selectedPatientService}" onclick ="PF('templateDlg').show()" ajax="true"/>
</p:column>
</p:dataTable>
and im updating xhtml in ui:include here in the dialog box
<p:dialog id="mainDialog" header="Selected Template" widgetVar="templateDlg">
<h:panelGroup id="reportContent">
<ui:include src="#{resultEntryBean.selectedTemplate()}.xhtml"></ui:include>
</h:panelGroup>
</h:form>
How should I update the xhtml file in the ui:include of p:dialog
I am using PF 5.3, on (weblogic 11g/jsf2.0/java 1.6).
I thought the issue of not shown emptyMessage in Datatable is fixed in 5.3, but inspite of using the latest version, i still dont see the message. Below is my sample code.
<p:dataTable id="attaDt" var="fileRow" value="#{pendpaybean.selectedPayDetailsFiles}"
rowIndexVar="rowIndex"
emptyMessage="No Files Uploaded"
>
<p:column headerText="Uploaded Date"
width="15px;" style="text-align:center"
>
<h:outputText value="#{fileRow.columns[0]}" />
</p:column>
<p:column headerText="Uploaded By"
width="30px;" style="text-align:center"
>
<h:outputText value="#{fileRow.columns[3]}" />
</p:column>
</p:datatable>
Any help ?
Your code works well. NOTE I put attribute value to null for showing emptyMessage.
Your adapted code:
<h:body>
<h:form>
<p:dataTable id="attaDt" value="#{null}" var="fileRow" rowIndexVar="rowIndex" emptyMessage="No Files Uploaded">
<p:column headerText="Uploaded Date" width="15px;" style="text-align:center">
<h:outputText value="#{fileRow.columns[0]}" />
</p:column>
<p:column headerText="Uploaded By" width="30px;" style="text-align:center">
<h:outputText value="#{fileRow.columns[3]}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
can we do a internal sorting in primeface datetable ? If i have column a ,b ,c. can i sort the column c and then internally by column b in p:dataTable.
<h:form>
<p:dataTable var="car" value="#{tableBean.carsSmall}">
<p:column headerText="Model">
<h:outputText value="#{car.model}" />
</p:column>
<p:column headerText="a">
<h:outputText value="#{car.year}" />
</p:column>
<p:column headerText="b">
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column headerText="c">
<h:outputText value="#{car.color}" />
</p:column>
</p:dataTable>
</h:form>
Yes, you can. http://www.primefaces.org/showcase/ui/datatableSortingMultiple.jsf
P.S Don't forget pressing CTRL or Cmd :)
I have a form with a panel and two dataTables. The code below has had most of the columns removed to make it easier to follow.
<h:form id="invoiceLookUp">
<p:panel>
<f:facet name="header">
<p:column style="font-weight: bold;">
Invoice Selection Criteria
</p:column>
</f:facet>
<h:outputText value="Seq ID"/>
<p:inputText
id="invoice_header_seq_id" styleClass="field" size="10"
value="#{invoiceBean.invoice_header_seq_id}"
/>
<p:commandButton
update="invoicesTable" value="Look Up"
action="#{invoiceBean.addInvoices()}"
/>
</p:panel>
<p:dataTable
id="invoicesTable" var="invoice" rows="15" lazy="true" selectionMode="single"
value="#{invoiceBean.invoiceList}"
rowKey="#{invoice.invoiceHeader.invoiceHeaderSeqId}"
selection="#{invoiceBean.selectedInvoice}"
>
<p:ajax event="rowSelect" update=":invoiceLookUp:invoiceLinesTable"/>
<f:facet name="header"><h:outputText value="Invoice Headers" /></f:facet>
<p:column sortBy="#{invoice.invoiceHeader.invoiceHeaderSeqId}" id="invoiceSeqId">
<f:facet name="header">
<h:outputText value="Seq ID" title="Invoice Header Seq ID"/>
</f:facet>
<h:outputText value="#{invoice.invoiceHeader.invoiceHeaderSeqId}" />
</p:column>
</p:dataTable>
<p:dataTable
id="invoiceLinesTable" var="invoiceLine" rows="15" lazy="true" selectionMode="single"
value="#{invoiceBean.selectedInvoice.invoiceLines}"
rowKey="#{invoiceLine.invoiceLineSeqId}"
selection="#{invoiceBean.selectedInvoiceLine}"
>
<f:facet name="header"><h:outputText value="Invoice Lines" /></f:facet>
<p:column sortBy="#{invoiceLine.invoiceLineSeqId}" id="invoiceLineSeqId">
<f:facet name="header"><h:outputText value="Line Seq ID"/></f:facet>
<h:outputText value="#{invoiceLine.invoiceLineSeqId}"/>
</p:column>
</p:dataTable>
</h:form>
When you enter a Seq ID and then click Look Up, the table populates as expected. When I select a row in the invoicesTable, I get the following error:
javax.faces.FacesException: Cannot find component with identifier ":invoiceLookUp:invoiceLinesTable" referenced from "form:invoiceLookUp:invoicesTable".
Can anyone tell me what I am doing wrong?