2011-11-17 34 views
5

Có cách nào để thiết lập tham số bean được quản lý trong một thành phần hỗn hợp và sau đó để lại các lớp đang sử dụng để quyết định bean được quản lý thực tế nào sử dụng?Đặt Bean được quản lý làm tham số trong Component Composite

cái gì đó dọc theo dòng: comp.xhtml

 <cc:interface> 
      <cc:attribute name="price" /> 
      <cc:param name="pageBean" value="#{superBean}" />  
     <cc:interface> 
     <cc:implementation> 
       <h:outputText value="#{cc.attrs.price}"/> 
     </cc:implementation> 

Và sau đó, trong sử dụng trang

<ezcomp:comp pageBean="actualBean" 
          price="#{actualBean.price}" > 

    </ezcomp:comp> 

Trong trường hợp của tôi ActualBean là một subtype của SuperBean.

Tôi thậm chí không chắc chắn điều này là có thể, nhưng chúng ta hãy chỉ nói nó sẽ là tuyệt vời nếu ai đó chứng minh tôi sai.

Cảm ơn bạn trước

+0

Điều này làm cho không có ý nghĩa. Chính xác yêu cầu chức năng là gì? Hạn chế loại bean được quản lý thành một loại nhất định? – BalusC

+2

Để loại bỏ mã trùng lặp, về cơ bản. tôi có rất nhiều thuộc tính cần được đặt trong thành phần tổng hợp. Điều duy nhất khác với các trang sử dụng là tên của các bean được quản lý, tất cả đều là các kiểu con của một superbean. Nó không cần thiết, tôi chỉ tự hỏi nếu nó có thể. – glasspill

Trả lời

10

Để loại bỏ mã trùng lặp, về cơ bản. tôi có rất nhiều thuộc tính cần được đặt trong thành phần tổng hợp. Điều duy nhất khác với các trang sử dụng là tên của các bean được quản lý, tất cả đều là các kiểu con của một superbean.

Bạn không cần phải chỉ định tất cả các thuộc tính. Chỉ cần chỉ định một mình đậu là đủ. Bạn có thể tham chiếu trực tiếp các thuộc tính của nó trong thành phần tổng hợp.

<cc:interface> 
    <cc:attribute name="pageBean" type="com.example.SuperBean" required="true" />  
<cc:interface> 
<cc:implementation> 
    <h:outputText value="#{cc.attrs.pageBean.price}"/> 
</cc:implementation> 

với

<ezcomp:comp pageBean="#{actualBean}" /> 
Các vấn đề liên quan