2011-01-27 20 views
8

Sto cercando di utilizzare il componente Star Rating da PrimeFaces. Tuttavia, non ti consente di passare i parametri. Ciò mi rende impossibile fare una ricerca per ottenere l'entità dal database che mi piacerebbe classificare. Ho provato qualcosa di simile, ma senza successo:Passare i parametri al componente PrimeFaces Star Rating?

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

C'è un altro modo che io possa passare il parametro nella mia classe azione? C'è qualcosa che mi manca che mi permetterebbe di ottenere il comportamento che voglio? Grazie per l'aiuto!

+0

non riesco a vedere come questo è utile in questo esempio particolare. Stai facendo riferimento allo ** stesso ** oggetto in entrambi # {{myObj.myRating} 'e' # {myObj.id} '. Com'è possibile che '# {myObj.myRating}' non sappia del proprio 'id'? Prova a trovare un esempio migliore del mondo reale. – BalusC

+0

Immagina di visualizzare un oggetto su un sito eCommerce. Ti piacerebbe essere in grado di dargli una valutazione.Non voglio dover creare una nuova conversazione Seam per ogni singolo elemento visualizzato, quindi dovrò mantenere lo stato e passare l'ID oggetto come parametro in modo da poter impostare la valutazione di conseguenza. – Shadowman

risposta

1

ho finalmente capito come fare questo ...

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

Poi, nella mia classe di azione, io sono in grado di ottenere il valore per selectedObj facendo così ...

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

Pezzo di torta!

0

f: viewParam permette di passare parametri di richiesta di proprietà del bean

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

id impostato nel Bean MyObj a pagina carico

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

Dal momento che il fagiolo ha l'id, quando il metodo rateListener è chiamato l'id può essere utilizzato per salvare la valutazione al database

+0

È disponibile in JSF 1.2? O solo 2.0? La nostra applicazione utilizza 1.2. – Shadowman

0

hai provato a utilizzare f: setPropertyActionListener nel tuo pulsante in modo da poter inviare qualsiasi parametro vuoi la tua classe d'azione? o devi farlo all'interno della p: valutazione?

o si può fare qualcosa di simile

voto privata Giudizio;

// getter -setter

e nel vostro fagioli azione, è possibile accedere a questo valore ((UIParameter) rating.getChildren(). Get (0)). GetValue() ;

se questo è il caso, si potrebbe fare sth sbagliato in quanto questo non dovrebbe essere il caso mentre si utilizza JSF.

solo i miei due centesimi ...

+0

Hmmmm ... non sembra funzionare per me. O quello, o non lo sto facendo bene. Hai un esempio di come lo configureresti? Potrei non farlo nel modo giusto. – Shadowman

1

ho risolto come segue:

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

Nel mio backing bean, io sono in grado di ottenere il valore per contentId come segue:

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