2011-01-27 25 views
8

Tôi đang cố sử dụng thành phần Star Rating từ PrimeFaces. Tuy nhiên, nó không cho phép bạn truyền vào các tham số. Điều đó khiến tôi không thể thực hiện tra cứu để lấy thực thể từ cơ sở dữ liệu mà tôi muốn xếp hạng. Tôi đã thử một cái gì đó như thế này, nhưng không thành công:Chuyển tham số tới thành phần Xếp hạng sao PrimeFaces?

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

Có cách nào khác để tôi có thể chuyển tham số vào lớp hành động của mình không? Có cái gì tôi đang thiếu mà sẽ cho phép tôi để có được những hành vi tôi muốn? Cảm ơn bạn đã giúp đỡ!

+0

Tôi không thấy như thế nào đó là hữu ích trong việc này ví dụ cụ thể. Bạn đang tham chiếu đối tượng ** cùng ** trong cả '# {myObj.myRating}' và '# {myObj.id}'. Làm thế nào có thể '# {myObj.myRating}' không biết về 'id' của chính nó? Cố gắng đưa ra một ví dụ thực tế tốt hơn. – BalusC

+0

Hãy tưởng tượng xem một mục trên trang web Thương mại điện tử. Bạn muốn có thể xếp hạng.Tôi không muốn phải tạo một cuộc trò chuyện Seam mới cho từng mục bạn xem, vì vậy tôi sẽ cần duy trì trạng thái và chuyển ID mục dưới dạng tham số để tôi có thể đặt xếp hạng tương ứng. – Shadowman

Trả lời

1

cuối cùng tôi đã tìm ra cách để làm điều này ...

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

Sau đó, trong lớp hành động của tôi, tôi có thể nhận được giá trị cho selectedObj bằng cách thực hiện điều này ...

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

Miếng bánh!

0

f: viewParam cho phép bạn vượt qua các thông số yêu cầu thuộc tính bean

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

id được thiết lập trong myObj Bean trên tải trang

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

Kể từ đậu của bạn có id, khi các phương pháp rateListener được gọi là id có thể được sử dụng để lưu xếp hạng vào cơ sở dữ liệu

+0

Tính năng này có sẵn trong JSF 1.2 không? Hoặc chỉ 2.0? Ứng dụng của chúng tôi đang sử dụng 1.2. – Shadowman

0

bạn đã cố gắng sử dụng f: setPropertyActionListener trong nút của mình để bạn có thể gửi bất kỳ tham số nào bạn muốn lớp hành động của bạn? hoặc bạn phải làm điều đó bên trong p: rating?

hoặc bạn có thể làm điều gì đó như

riêng Xếp hạng đánh giá;

// getter -setter

và trong đậu hành động của bạn, bạn có thể truy cập giá trị này ((UIParameter) rating.getChildren(). Nhận được (0)). GetValue() ;

nếu trường hợp này xảy ra, bạn có thể đang làm sai do đây không phải là trường hợp trong khi bạn đang sử dụng JSF.

chỉ hai xu của tôi ...

+0

Hmmmm ... dường như không hoạt động đối với tôi. Hoặc là, hoặc tôi không làm đúng. Bạn có một ví dụ về cách bạn sẽ thiết lập nó? Tôi có thể không làm điều đó đúng. – Shadowman

1

Tôi giải quyết nó như sau:

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

Trong đậu ủng hộ tôi, tôi có thể nhận được giá trị cho contentId như sau:

Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
int contentId = Integer.parseInt(params.get("contentId")); 
Các vấn đề liên quan