2013-04-30 48 views
1

我在p:dataTable中遇到了兩起奇怪行爲。首先,當我嘗試撥打h:linkf:param時,鏈接始終發送相同的ID。始終是第一個條目的ID。 更大的問題是,當我按下命令按鈕時,h:link被調用,但這種行爲完全沒有預料到。特別是沒有正確的參數。 這是一個錯誤還是我做錯了什麼? 當我刪除h:link一切正常工作。 我希望得到任何幫助在這一問題上primefaces <p:datatable><p:commandlink>意外觸發另一個<h:link>

我Primefaces版本是3.5和IM與Liferay的6.1在Tomcat 7的工作有了最新FacesBridge

<h:form id="serviceForm"> 
    <p:dataTable id="newServicesTable" var="service" value="#{cloudServicesBean.newServices}" rowKey="service.serviceId" selection="#{cloudServicesBean.selectedService}"> 
       <p:column headerText="Servicename"> 
       <h:link outcome="/views/cloudservice/overview.xhtml" includeViewParams="true" value="#{service.serviceName}"> 
         <h:outputText value="#{service.serviceId}"/> 
         <f:param name="selectedServiceId" value="#{service.serviceId}" /> 
        </h:link> 
       </p:column> 
       <p:column headerText="Provider"> 
        <h:outputText value="#{adminBean.getOrganizationNameForId(service.providerId)}" /> 
       </p:column> 
       <p:column headerText="Datum"> 
        <h:outputText value="#{service.createDate}" /> 
       </p:column> 
       <p:column headerText="Aktionen" rendered="#{adminBean.isUserAdministrator()}"> 
        <p:commandButton icon="ui-icon-check" action="#{cloudServicesBean.setServiceApproved}" update=":serviceForm"> 
         <f:setPropertyActionListener value="#{service}" target="#{cloudServicesBean.selectedService}" /> 
        </p:commandButton> 

      </p:column> 
      </p:dataTable> 
+0

您可以嘗試'rowIndexVar =「index」'代替'rowKey',然後通過f:param value =「#{index}」'傳遞值。這應該解決設置的第一個元素問題。 – 2013-04-30 16:39:18

+0

除非錯誤輸入,否則必須在'rowKey'屬性中包含EL表達式。這意味着'#{service.serviceId}'而不是'service.serviceId'。我可以看到的第二個問題是,你給'h:link'一個值並且把'h:outputText'放在裏面,這基本上是多餘的。 – 2013-05-01 16:21:51

+0

當我使用索引時,該值始終爲0,冗餘也沒有幫助。我總是得到相同的selectedServiceId。令人驚訝的是serviceId的outputText是正確的。但不是Param總是相同的id。即使我把一個硬編碼參數在另一列與我修復ID它具有相同的ID像每隔一個參數值:( – 2013-05-02 11:25:36

回答

1

我有完全相同的問題。我在Tomcat 7上運行帶有Liferay 6.0.11的Primefaces 3.5。當我將Liferay JSF依賴從版本3.1.2.ga3切換到3.1.3-ga4時,問題得到了解決。

 <dependency> 
     <groupId>com.liferay.faces</groupId> 
     <artifactId>liferay-faces-alloy</artifactId> 
     <version>3.1.3-ga4</version> 
     </dependency> 
     <dependency> 
     <groupId>com.liferay.faces</groupId> 
     <artifactId>liferay-faces-bridge-impl</artifactId> 
     <version>3.1.3-ga4</version> 
     </dependency> 
     <dependency> 
     <groupId>com.liferay.faces</groupId> 
     <artifactId>liferay-faces-portal</artifactId> 
     <version>3.1.3-ga4</version>