2012-03-06 20 views
0

我有以下問題:我需要從「列表頁面」重定向到詳細信息頁面,但我需要列表中的編號。本例中的「記錄」是rich:dataTable的var屬性。首先,我想這個問題:如何正確參數化a4j:commandLink?

<a4j:commandLink id="detailsLink" value="show details" execute="@this" action="/customerDetails?faces-redirect=true&amp;cusid=#{record.id}" /> 

但這是無效的語法,所以我想是這樣的:

<a4j:commandLink id="detailsLink" value="show details" execute="@this" action="/customerDetails?faces-redirect=true"> 
<f:attribute name="cusid" value="#{record.id}"/> 
</a4j:commandLink> 

(我甚至嘗試F:PARAM) 在我試過的目標頁面接收值與...

<f:metadata> 
<f:viewParam required="false" name="cusid" value="#{customerBean.editCustomer}"/> 
</f:metadata> 

基本上F:元數據的作品,因爲當我用下面的硬編碼參數試試吧,我接受它的價值:

<a4j:commandLink id="detailsLink" value="show details" execute="@this" action="/customerDetails?faces-redirect=true&amp;cusid=120" /> 

我找到了解決辦法,但我不知道這是正確的方式:

在customerBean我做如下:

public String editCustomer(long customerId) 
{ 

    edit(customerId); 
    return "/customerDetails?faces-redirect=true"; 
} 

但我不認爲這是使用Rich Faces發送和接收參數的常用方法。有沒有更好的解決方案?

回答

1

<a4j:commandLink>在您需要正常的GET請求時發送ajax POST請求。改爲使用<h:link>

<h:link value="show details" outcome="/customerDetails?cusid=120" /> 
+0

基本上這似乎工作,即使有一個EL表達式作爲參數,但有一些奇怪的行爲。在customersDetail上,我嘗試使用f:metadata屬性獲取param,如上所述。當點擊該鏈接時,第一次重定向到詳細信息頁面時,將不會執行元數據屬性方法。當我切換回列表頁面並再次嘗試時,它突然生效。我不知道那有什麼問題。 – Bevor 2012-03-06 13:59:28

+0

聽起來像一個緩存問題。清理瀏覽器緩存並重啓服務器。 – BalusC 2012-03-06 14:05:02

+0

我認爲這與另一個問題有關。但無論如何,這不在我的問題範圍之內。 – Bevor 2012-03-06 14:31:09

0

這是最好的辦法。所提供的示例傳遞了2個參數。你可以有多個。只需使用assignTo屬性和值屬性即可。希望這回答你的問題。

<a4j:commandLink action="#{myBackingBean.myAction}"> 
    <a4j:param name="jobIdParam" value="#{job.jobNumber}" 
     assignTo="#{myBackingBean.jobId}" /> 
    <a4j:param name="isDisplayedParam" value="true" 
     assignTo="#{myBackingBean.displayed}"/> 
</a4j:commandLink>