2011-01-27 21 views
8

我正在嘗試使用PrimeFaces的Star Rating組件。但是,它不允許您傳入參數。這使我無法查詢從數據庫中獲取我想要評分的實體。我已經試過這樣的事情,但沒有成功:將參數傳遞給PrimeFaces Star Rating組件?

<p:rating value="#{myAction.rating}"> 
    <f:param name="myObjID" value="#{myObj.id}" /> 
</p:rating> 

有沒有我可以傳遞參數到我的動作類的另一種方式?有什麼我錯過,會讓我得到我想要的行爲?謝謝你的幫助!

+0

我看不出在這個非常有用特別的例子。你在`#{myObj.myRating}`和`#{myObj.id}`中引用了**相同的**對象。 `#{myObj.myRating}`不知道它自己的`id`怎麼可能?試着想出一個更好的現實世界的例子。 – BalusC 2011-01-30 02:19:31

+0

想象一下在電子商務網站上查看項目。您希望能夠給它評分。我不想爲每個查看的單個項目創建一個新的Seam對話,所以我需要保持狀態並將項目ID作爲參數傳遞,以便我可以相應地設置評分。 – Shadowman 2011-01-30 20:51:38

回答

1

我終於想通了如何做到這一點?

<h:form> 
    <p:rating value="#{myAction.rating}" /> 
    <input type="hidden" name="selectedObj" value="#{myObj.id}" /> 
</h:form> 

然後,在我的動作類,我能夠得到selectedObj值通過這樣做...

String selectedObjID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("selectedObj"); 

一塊蛋糕!

0

F:viewParam可以傳遞請求參數bean屬性

<f:metadata> 
    <f:viewParam name="myObjID" value="#{myObj.id}"/> 
</f:metdata> 

ID獲取在MyObj中的Bean設置在頁面加載

<p:rating rateListener="#{myObj.myRating}" /> 

因爲你的bean有標識,rateListener方法時被稱爲id可以用來將評級保存到數據庫中

+0

這在JSF 1.2中可用嗎?還是隻有2.0?我們的應用程序正在使用1.2。 – Shadowman 2011-01-28 20:44:51

0

您是否嘗試在按鈕中使用f:setPropertyActionListener,以便您可以發送任何參數你想要你的行動課?或者你必須在p:等級內做到這一點?

或者你可以做點像

private評級rating;

//吸氣-setter

,並在你的行動豆,你可以訪問此值 ((UIParameter)rating.getChildren()得到(0))。的getValue() ;

如果是這種情況,您可能會做錯錯誤,因爲在使用JSF時不應該出現這種情況。

只是我的兩分錢......

1

我解決它,如下所示:

<h:form> 
    <p:rating id="rate" value="#{userHomeControllerBean.rating}"> 
     <f:param name="contentId" value="#{sharedcontent.content.id}" /> 
     <p:ajax event="rate" listener="#{userHomeControllerBean.onrate}" update="rate" /> 
     <p:ajax event="cancel" listener="#{userHomeControllerBean.oncancel}" update="rate" /> 
    </p:rating> 
</h:form> 

我支持bean中,我能夠得到價值contentId如下:

Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
int contentId = Integer.parseInt(params.get("contentId"));