2012-11-15 40 views
3

我在下面http://www.primefaces.org/showcase/ui/datatableRowSelectionSingle.jsfPrimefaces和Liferay的:次選擇不工作

給我使用這個作爲Liferay的portlet中的例子。這裏是我的代碼:

的HTML:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 

    <h:form id="form"> 

     <h:panelGrid columns="1" cellpadding="10" width="100%"> 

      <p:dataTable id="campaignTable" var="data" 
       value="#{campaign.allCampaigns}" selectionMode="single" 
       rowKey="#{data.campaignId}" selection="#{campaign.selectedCampaign}"> 

       <f:facet name="header"> 
        <p:commandButton type="button" value="Create Campaign" icon="ui-icon-document" update=":form:createForm" onclick="createDialog.show()" /> 

       </f:facet> 

       <p:column sortBy="#{data.campaignId}"> 
        <f:facet name="header">ID</f:facet> 
        <h:outputText value="#{data.campaignId}" /> 
       </p:column> 

       <p:column sortBy="#{data.carrier}"> 
        <f:facet name="header">Carrier</f:facet> 
        <h:outputText value="#{data.carrier}" /> 
       </p:column> 

       <p:column sortBy="#{data.shortCode}"> 
        <f:facet name="header">Short Code</f:facet> 
        <h:outputText value="#{data.shortCode}" /> 
       </p:column> 

       <p:column sortBy="#{data.sendType}"> 
        <f:facet name="header">Send Type</f:facet> 
        <h:outputText value="#{data.sendType}" /> 
       </p:column> 

       <p:column sortBy="#{data.startDate}"> 
        <f:facet name="header">Start Date</f:facet> 
        <h:outputText value="#{data.startDate.time}"> 
         <f:convertDateTime pattern="MM/dd/yyyy hh:mm a" /> 
        </h:outputText> 
       </p:column> 

       <p:column sortBy="#{data.endDate}"> 
        <f:facet name="header">End Date</f:facet> 
        <h:outputText value="#{data.endDate.time}"> 
         <f:convertDateTime pattern="MM/dd/yyyy hh:mm a" /> 
        </h:outputText> 
       </p:column> 

       <p:column sortBy="#{data.messageText}"> 
        <f:facet name="header">Text Message</f:facet> 
        <h:outputText value="#{data.messageText}" /> 
       </p:column> 

       <p:column sortBy="#{data.serviceId}"> 
        <f:facet name="header">Service ID</f:facet> 
        <h:outputText value="#{data.serviceId}" /> 
       </p:column> 

       <p:column sortBy="#{data.responseKeyword}"> 
        <f:facet name="header">Response Keyword</f:facet> 
        <h:outputText value="#{data.responseKeyword}" /> 
       </p:column> 

      </p:dataTable> 
     </h:panelGrid> 


     <p:dialog id="createDialog" header="Create Campaign" widgetVar="createDialog"> 

      <h:panelGrid id="createForm" columns="2" cellpadding="5"> 
       <h:outputLabel for="campaignId" value="Campaign ID:" /> 
       <p:inputText value="#{campaign.selectedCampaign.campaignId}" id="campaignId" required="true" label="Campaign ID" /> 

       <h:outputLabel for="startDate" value="Start Date:" /> 
       <p:inputText value="#{campaign.selectedCampaign.startDate}" id="startDate" required="true" label="Start Date" /> 

       <f:facet name="footer"> 
        <p:commandButton id="createCampaignButton" value="Create" update=":growl" actionListener="#{campaign.createCampaign()}" /> 
       </f:facet> 
      </h:panelGrid> 
     </p:dialog> 

    </h:form> 

</ui:composition> 

和背豆:

@ManagedBean 
@ViewScoped 
public class Campaign implements Serializable { 

    private List<CampaignBean> allCampaigns; 
    private CampaignBean selectedCampaign; 

    public Campaign() { 
     MyProxy proxy = new MyProxy(); 
     try { 
      CampaignsResponse response = proxy.getAllCampaigns(); 
      if (response != null) { 
       setAllCampaigns(new ArrayList<CampaignBean>(Arrays 
         .asList(response.getCampaigns()))); 
      } 
     } catch (RemoteException e) { 
      FacesContext context = FacesContext.getCurrentInstance(); 
      context.addMessage(null, new FacesMessage("Error", 
        "Problem listing campaigns")); 
     } 
    } 

    public void createCampaign() { 

    } 


    /* Getters and Setters */ 
    public List<CampaignBean> getAllCampaigns() { 
     return allCampaigns; 
    } 

    public void setAllCampaigns(List<CampaignBean> allCampaigns) { 
     this.allCampaigns = allCampaigns; 
    } 

    public CampaignBean getSelectedCampaign() { 
     return selectedCampaign; 
    } 

    public void setSelectedCampaign(CampaignBean selectedCampaign) { 
     this.selectedCampaign = selectedCampaign; 
    } 


} 

的形式不填充了選定的行值!

+0

getCampaignStatusMessages()方法是否存在?它似乎不在您的「Campaign」課程中。 – Magnilex

+0

@MagnusTengdahl是的。我只是省略了它,因爲它與代碼無關。這是一個簡單的getter。 –

+0

我已經刪除該行,因爲它是不相關 –

回答

2

我終於明白了問題所在。整個表格都在「TabView」組件內。我使用了錯誤的選擇器,即代替使用update=":form:createForm",我應該使用update=":tabView:form:createForm"並刪除type="button"聲明。