我正在尝试使用PrimeFaces中的Star Rating组件。但是,它不允许您传入参数。这使得我无法进行查找以从数据库中获取我想要评分的实体。我尝试过类似的东西,但没有成功:
<p:rating value="#{myAction.rating}">
<f:param name="myObjID" value="#{myObj.id}" />
</p:rating>
有没有其他方法可以将参数传递给我的动作类?有什么我想念的东西会让我得到我想要的行为吗?谢谢你的帮助!
答案 0 :(得分: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");
一块蛋糕!
答案 1 :(得分: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"));
答案 2 :(得分:0)
f:viewParam允许您将请求参数传递给bean属性
<f:metadata>
<f:viewParam name="myObjID" value="#{myObj.id}"/>
</f:metdata>
id在页面加载的MyObj Bean中设置
<p:rating rateListener="#{myObj.myRating}" />
由于您的bean具有id,因此在调用rateListener方法时,可以使用id将评级保存到数据库
答案 3 :(得分:0)
您是否尝试在按钮中使用f:setPropertyActionListener,以便可以将任何参数发送到您的操作类?或者你必须在p:rating中做到这一点?
或者您可以执行类似
的操作私人评级;
// getter -setter
并在您的操作bean中,您可以访问此值 ((UIParameter)rating.getChildren()得到(0)。)的getValue();
如果是这种情况,你可能会做错了,因为当你使用JSF时不应该这样。
只是我的两分钱......