2014-02-19 72 views
0

我目前正在使用PrimeFaces的組件內嵌一個可訂購列表。我能夠讓列表正確顯示在我的物品上。但是,當我保存列表並將其提交回服務器時,出於某種原因,重新排列的項目沒有反映到後臺bean中。由於Primefaces showcase能夠看到變化,我做錯了什麼?Primefaces p:orderList java支持列表不更新

XHTML片段

<h:form id="confirmDialogForm"> 
      <p:confirmDialog id="arrangeProjDialog" widgetVar="arrangeDlg" width="600" 
       header="Meeting Order" 
       appendToBody="true" message="Drag and drop to rearrange meeting order">  

      <p:orderList id="arrangeProjDialogList" 
       value="#{adminMeetingListBean.orderProjList}" 
       converter="#{adminMeetingListBean.rowConverter}" 
       var="po" 
       controlsLocation="left" 
       styleClass="wideList" 
       itemLabel="#{po.projectTitle}" 
       itemValue="#{po}" 
       > 
       <f:facet name="caption">Proposals</f:facet> 
      </p:orderList> 

       <p:commandButton value="Save" ajax="true" process="arrangeProjDialogList @this" 
        actionListener="#{adminMeetingListBean.updateProposalMeetingOrder}" onclick="arrangeDlg.hide();"> 
       </p:commandButton> 
       <p:button value="Cancel" onclick="arrangeDlg.hide(); return false;" /> 
      </p:confirmDialog> 
     </h:form> 

輔助Bean

public void updateProposalMeetingOrder() { 

    if (selectedMeeting != null) { 

     orderProjTitles.get(0); 

     meetingService.updateMeetingProjSequence(orderProjList, selectedMeeting.getMeetingId()); 
    } 

} 

名單是POJO的 「ProposalOrderRow」 的對象列表。這樣做的定義:

public class ProposalOrderRow implements Serializable { 

    private static final long serialVersionUID = -5012155654584965160L; 

    private int dispSeq; 
    private int appId; 
    private int assignmentId; 
    private String refNo; 
    private String projectTitle; 

    public int getDispSeq() { 
     return dispSeq; 
    } 

    public void setDispSeq(int dispSeq) { 
     this.dispSeq = dispSeq; 
    } 

    public int getAppId() { 
     return appId; 
    } 

    public void setAppId(int appId) { 
     this.appId = appId; 
    } 

    public String getRefNo() { 
     return refNo; 
    } 

    public void setRefNo(String refNo) { 
     this.refNo = refNo; 
    } 

    public String getProjectTitle() { 
     return projectTitle; 
    } 

    public void setProjectTitle(String projectTitle) { 
     this.projectTitle = projectTitle; 
    } 

    public int getAssignmentId() { 
     return assignmentId; 
    } 

    public void setAssignmentId(int assignmentId) { 
     this.assignmentId = assignmentId; 
    } 
} 

轉換器:

@FacesConverter("proposalOrderRowConverter") 
public class ProposalOrderRowConverter implements Converter { 

    private List<ProposalOrderRow> orderRows; 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String newValue) { 

     if (newValue.isEmpty()) { 
      return null; 
     } 

     for (ProposalOrderRow item : orderRows) { 

      String refNo = item.getRefNo(); 

      if (refNo.equals(newValue)) { 
       return item; 
      } 

     } 

     return null; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 

     if (value == null) { 
      return ""; 
     } 

     ProposalOrderRow row = (ProposalOrderRow) value; 

     String output = row.getRefNo(); 

     return output; 
    } 

    public List<ProposalOrderRow> getOrderRows() { 
     return orderRows; 
    } 

    public void setOrderRows(List<ProposalOrderRow> orderRows) { 
     this.orderRows = orderRows; 
    } 

} 
+0

您的轉換器在哪裏? – Makky

+0

謝謝。我按照問題發佈了轉換器。問題是,當轉換器的getAsString被調用時,它的getAsObject方法永遠不會被調用。 – futureelite7

+0

您還需要在p:orderList中添加tag converter =「」。 – Makky

回答

0

此問題是由appendToBody在確認對話框引起= 「真」。將其設置爲false可以解決問題。

查看鏈接:link