2011-01-27 10 views
8

Próbuję użyć komponentu Star Rating z PrimeFaces. Nie pozwala jednak na przekazywanie parametrów. To uniemożliwia mi wykonanie odnośnika, aby uzyskać jednostkę z bazy danych, którą chciałbym ocenić. Próbowałem czegoś takiego, ale bez powodzenia:Przekazywanie parametrów do składnika PrimeFaces Star Rating?

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

Czy jest inny sposób, że mogę przekazać parametr do mojej klasy działania? Czy jest coś, czego mi brakowało, co pozwoliłoby mi uzyskać pożądane zachowanie? Dzięki za pomoc!

+0

ja nie rozumiem, jak to jest przydatne w tym szczególny przykład. Odwołujesz się do ** tego samego obiektu zarówno w '# {myObj.myRating}' i '# {myObj.id}'. Jak to możliwe, że '# {myObj.myRating}' nie wie o swoim własnym 'id'? Spróbuj wymyślić lepszy przykład z prawdziwego świata. – BalusC

+0

Wyobraź sobie oglądanie przedmiotu w witrynie eCommerce. Chciałbyś móc przyznać mu ocenę.Nie chcę tworzyć nowej konwersacji Seam dla każdego wyświetlanego elementu, więc muszę zachować stan i przekazać identyfikator przedmiotu jako parametr, dzięki czemu mogę odpowiednio ustawić tę ocenę. – Shadowman

Odpowiedz

1

I w końcu zorientowali się, jak to zrobić ...

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

Następnie w mojej klasie działania, jestem w stanie uzyskać wartość dla selectedObj wykonując to ...

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

Bułka z masłem!

0

f: viewParam pozwala przekazać parametry żądania do właściwości fasoli

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

id zostanie ustawionych w myObj Bean na stronie obciążenia

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

Ponieważ fasola ma identyfikator, gdy metoda rateListener nazywany może być identyfikator do zapisania oceny do bazy danych

+0

Czy jest to dostępne w JSF 1.2? Czy tylko 2.0? Nasza aplikacja korzysta z wersji 1.2. – Shadowman

0

Czy próbowałeś użyć f: setPropertyActionListener w swoim przycisku, abyś mógł wysłać dowolny parametr chcesz do swojej klasy działania? lub musisz to zrobić wewnątrz oceny p:?

lub możesz zrobić coś w rodzaju:

prywatna ocena Ocena;

// getter -setter

i fasoli w swoim działaniu, można uzyskać dostęp do tej wartości ((UIParameter) rating.getChildren(). Get (0)). GetValue() ;

jeśli tak jest, być może robisz coś złego, ponieważ nie powinno tak być w przypadku korzystania z JSF.

tylko moje dwa centy ...

+0

Hmmmm ... nie działa dla mnie. Albo to, albo nie robię tego dobrze. Czy masz przykład, jak to skonfigurować? Być może nie robię tego dobrze. – Shadowman

1

Rozwiązałem to w następujący sposób:

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

W moim podkładowej fasoli, jestem w stanie uzyskać wartość dla contentId następująco:

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