How to update specific row in Primefaces datatable

前端 未结 2 1260
南方客
南方客 2020-12-06 03:24

Primefaces 3.5, Mojarra 2.1.14. This is my PF datatable, it contains one non-editable boolean column named \'automatic\', and editable \'label\' column:



        
相关标签:
2条回答
  • 2020-12-06 03:35

    I believe you can solve this without having to know the details of the ID of the component you wish to update. You can pass it as a parameter to the bean.

    First, bind the component you wish to update. You don't actual need a bean to which this component is bound to. You just need to define some value which you can use to identify this component later in your JSF. So in your case, you would do something like:

    <p:selectBooleanCheckbox binding="#{isAutomaticComponent}" value="#{row.automatic}" disabled="true" id="isAutomatic"></p:selectBooleanCheckbox>
    

    Now access the component when you do your update. ie:

    <p:ajax event="cellEdit" process="@this" listener="#{myBean.onEditLabel(isAutomaticComponent.clientId)}" />
    

    Now you can update the component from your cellEdit event method without knowing the contents of the ID. ie:

    public void onEditLabel(CellEditEvent event, String idOfComponentToUpdate) {
    ...
    RequestContext.getCurrentInstance().update(idOfComponentToUpdate);
    ...
    
    0 讨论(0)
  • 2020-12-06 03:37

    You p:ajax tag is inside p:dataTable no in some specific row or column, so you cent so easy update some relative component id. You can with help of RequestContext update specific component in cell. So, remove update from p:ajax and add this to your onEditLabel method:

    RequestContext.getCurrentInstance().update(
      s.getClientId(FacesContext.getCurrentInstance()) +
      ":" + event.getRowIndex() +
      ":isAutomatic"
    );
    

    As you can see, id of component inside cell has row number before id you assigned.

    0 讨论(0)
提交回复
热议问题