2013-05-17 53 views
0

我有一個縫頁爲表中的行像這樣使用一個轉發器:空對象傳遞給上接縫中繼器的動作

<a4j:repeat id="r1279186" value="#{PatientList.entities}" var="Patient" rowKeyVar="rowIndex" > 
<tr> 
<td> 
    <a4j:commandButton action="#{PatientAction.inject(Patient)}" id="Button_1279184059161" reRender="Button_1287648925796" limitToList="true" /> 
</td> 
<td > 
    <span >#{Patient.name_fam}</span> 
</td> 
<td > 
    <span >#{Patient.name_giv}</span> 
</td> 
    <td> 
    <s:link id="Page_1234" action="#{PatientAction.inject(Patient)}" view="/somewhere/patient_details.seam" rendered="true" target="_blank" propagation="join" title="VIS" limitToList="true" > 
    <img src="images/24x24/info.png" title="VIS" alt="VIS}" style="height: 24px;width: 24px;"/> 
    </s:link> 
</td> 
</tr> 

PatientAction是豆,用方法稱爲注入,這輸入一個Patient類對象。 PatientList.entities是一個List,中繼器在名爲Patient的var上循環,與對象類名稱相同。

頁面返回給客戶端之前,縫呈現在列表中的每個病人(行)的名字和姓氏,並添加在第一列一個按鈕,並在最後一個環節。

使用當我點擊該按鈕時,在接收的參數注入相應於我按下按鈕的行病人執行動作的按鈕。 [OK!]

當我使用的鏈接(我用它來打開一個新的瀏覽器頁面,保持相同的談話)的方法注射只調用,當我點擊,但傳遞的參數爲空! (我可以在我的注射方法的調試看,來的病人爲null)

回答

1

你不能傳遞參數從重複元素的<s:link/>行動,在http://docs.jboss.org/seam/2.0.1.GA/reference/en/html/elenhancements.html#d0e22695

說引用:

使用迭代裏面的部件 - 組件,例如<c:forEach/><ui:repeat/>遍歷一個列表或者陣列,暴露在列表中嵌套組件的每個項目。如果您選擇使用<h:commandButton/><h:commandLink/>行這個偉大的工程。

但是,如果你想使用<s:link/><s:button/>您必須公開的項目作爲DataModel,並使用<dataTable/>(或等值的設置像<rich:dataTable/>一個組件)。既不<s:link/><s:button/>提交表單(並因此產生一個可收藏鏈路),所以需要一個「魔術」參數重新創建的項目時的操作方法被調用。當使用由DataModel支持數據表只能加入這個神奇的參數「

所以,你必須使用<h:commandLink/>代替<s:link/>,或者你可以創建一個可收藏的鏈接如下:

<s:link view="/somewhere/patient.details.xhtml"> 
    <f:param name="patientId" value="#{Patient.id}" /> 
    ... 
</s:link> 

這產生HTML這樣的鏈路:/somewhere/patient_details.seam?patientId=5由於患者ID在鏈路承載,所述patient_details.xhtml頁面具有所需要的信息來檢索數據以供顯示

要。做到這一點,你需要把一個參數定義patient_details.page.xml使該值拿起頁面顯示之前,例如:

<!-- Here we use an EntityHome component, assuming Patient is a JPA entity. 
    When you set the ID of an EntityHome component, it automatically triggers 
    an EntityManager.find() call to retrieve the Entity from DB. --> 
<param name="patientId" value="#{patientHome.id}" /> 
+0

真的很感謝你們埃米爾! – Francesco