2014-02-19 44 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