Search code examples
htmlprimefacesprimefaces-datatable

Primefaces p:datatable sortBy not working properly


I have pre-made views displayed on my website. The data query is done via Hibernate from a DB2 database and is displayed with JSF. The whole thing runs on a local JBoss server.

This is the logical bean behind the HTML:

@Named(value = "vb")
@ViewScoped
public class ViewBean implements Serializable {

@Inject
private ViewHandler vh;

@PostConstruct
public void init() {
}

public List<PortView> getPVList() {
    return vh.getPortViewList();
}

The ViewHandler vh retrieves the List of the view(s) coming from the respective entity. (see below)

@Stateless
public class ViewHandler {

public List<PortView> getPortViewList() {
    List<PortView> pvlist = em.createQuery("SELECT v FROM PortView v", PortView.class).getResultList();
    return pvlist;
}

Here you see the p:datatable in my html:

<html>
<h:body>
<h:form>
    <p:dataTable var="portview" value="#{vb.PVList}"
        resizableColumns="true" stickyHeader="true"
        stickyTopAt=".layout-topbar"
        style="margin-left:10%; margin-right:10%; font-family: verdana">

        <p:column style="width: 0px" sortable="false" />
        <p:column headerText="Instance" sortBy="#{portview.instance}"
            style="font-family: verdana; text-align:left">
            <h:outputText value="#{portview.instance}" />
        </p:column>

        [more columns]

    </p:dataTable>
</h:form>
</h:body>
</html>

Problem: Each single column cannot be sorted, the content is always random. What should I do to solve this?


Solution

  • Fortunately @Melloware was able to answer my question: You simply add sortBy="#{var.property}" to the p:dataTable attribute.

    For documentation, see here.