2011-01-27 48 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"));