Передача параметров компоненту звездного рейтинга PrimeFaces?

Я пытаюсь использовать компонент Звездный рейтинг от PrimeFaces. Однако он не позволяет передавать параметры. Это делает невозможным поиск объекта из базы данных, который я хотел бы оценить. Я пробовал что-то вроде этого, но безуспешно:

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

Есть ли другой способ передать параметр в мой класс действий? Есть ли что-то, что мне не хватает, что позволило бы мне получить желаемое поведение? Спасибо за вашу помощь!


person Shadowman    schedule 27.01.2011    source источник
comment
Я не понимаю, как это полезно в этом конкретном примере. Вы ссылаетесь на один и тот же объект как в #{myObj.myRating}, так и в #{myObj.id}. Как это возможно, что #{myObj.myRating} не знает о своем id? Попробуйте придумать лучший пример из реальной жизни.   -  person BalusC    schedule 30.01.2011
comment
Представьте, что вы просматриваете товар на сайте электронной коммерции. Вы хотели бы иметь возможность дать ему оценку. Я не хочу создавать новую беседу Seam для каждого отдельного элемента, который вы просматриваете, поэтому мне нужно будет поддерживать состояние и передавать идентификатор элемента в качестве параметра, чтобы я мог соответствующим образом установить рейтинг.   -  person Shadowman    schedule 30.01.2011


Ответы (4)


Наконец-то я понял, как это сделать...

<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");

Кусок пирога!

person Shadowman    schedule 24.03.2011

Я решил это следующим образом:

<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>

В моем вспомогательном компоненте я могу получить значение для contentId следующим образом:

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

f:viewParam позволяет передавать параметры запроса в свойства бина

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

id устанавливается в MyObj Bean при загрузке страницы

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

Поскольку у вашего bean-компонента есть идентификатор, при вызове метода rateListener идентификатор можно использовать для сохранения рейтинга в базе данных.

person Mark    schedule 27.01.2011
comment
Доступно ли это в JSF 1.2? Или только 2.0? Наше приложение использует версию 1.2. - person Shadowman; 28.01.2011

Вы пытались использовать f:setPropertyActionListener в своей кнопке, чтобы вы могли отправлять любой параметр, который хотите, в свой класс действий? или вы должны сделать это внутри p:rating?

или вы можете сделать что-то вроде

частный рейтинг Рейтинг;

//геттер-сеттер

и в вашем компоненте действия вы можете получить доступ к этому значению ((UIParameter)rating.getChildren().get(0)).getValue();

если это так, вы можете делать что-то неправильно, поскольку этого не должно быть, когда вы используете JSF.

просто мои пять копеек...

person Yigit    schedule 31.01.2011
comment
Хмммм... мне кажется не подходит. Либо так, либо я что-то не так делаю. У вас есть пример того, как вы это настроите? может я не правильно делаю. - person Shadowman; 02.02.2011