2013-05-30 40 views
6

Tôi phải di chuyển thành phần hỗn hợp thành thành phần tùy chỉnh. Ví dụ này là khá đơn giản, nhưng chứng minh vấn đề: các con của thành phần của tôi (my:test) cần phải được trả lại trong một thành phần khác. Composite my:testC, như một ví dụ mà tôi không muốn sử dụng, sẽ trông như thế nàyDi chuyển thành phần hỗn hợp thành thành phần tùy chỉnh

<composite:implementation> 
    <p:panel> 
    <composite:insertChildren/> 
    </p:panel> 
</composite:implementation> 

Rõ ràng (ít nhất tôi hy vọng tôi là đúng với giả thiết này) Tôi có thể không chỉ đơn giản là làm cho p:panel trong encodeBegin .

@FacesComponent("test") 
public class Test extends UIPanel 
{ 
    @Override 
    public void encodeBegin(FacesContext context) throws IOException 
    { 
    // ?? 
    } 

    @Override 
    public void encodeEnd(FacesContext context) throws IOException 
    { 
    // ?? 
    } 
} 

Tôi muốn sử dụng my:test theo một cách như thế này:

<my:test> 
    <h:outputText value="some Text"/> 
</my:test> 

Sản lượng nên giống nhau hơn so với sử dụng my:testC: một số chữ kết xuất trong một bảng điều khiển PrimeFaces. Làm thế nào tôi có thể mã hóa việc sử dụng p:panel trong lớp Java của tôi?

+0

Tôi không hiểu vấn đề/câu hỏi cụ thể (trên thực tế, không có câu hỏi cụ thể). Bạn có yêu cầu cụ thể cách mã hóa cùng một đầu ra của '' trong thành phần tùy chỉnh của bạn không? Hay bạn đang cụ thể hỏi làm thế nào để tái sử dụng bộ mã hóa mặc định (renderer) của '' cho phần đó? Các trẻ em không phải là vấn đề ở tất cả như là 'encodeChildren()' làm tất cả tự động, howerver câu cuối cùng của đoạn đầu tiên dường như chỉ ra nếu không, đó là khó hiểu. – BalusC

+0

@BalusC Cảm ơn bạn đã tìm kiếm sự cố này. Tôi đã cập nhật câu hỏi, hy vọng nó là tốt hơn để hiểu bây giờ. Để trả lời câu hỏi của bạn: Tôi đang cố gắng mã hóa cùng một đầu ra của 'p: panel'. – Thor

Trả lời

0

Bạn đã quan sát điều đó một cách chính xác. Bạn không thể chỉ đơn giản là hiển thị "p: panel" hoặc bất kỳ đánh dấu jsf nào khác trong một thành phần tùy chỉnh.

gì bạn có thể làm tuy nhiên:

  • Khởi tạo các thành phần phụ bằng cách sử dụng ví dụ ứng dụng, thêm nó như là một khía cạnh hoặc con để thành phần tùy chỉnh của bạn và sau đó gọi mã hóa trên nó trong renderer của riêng bạn.

  • Trực tiếp render HTML

  • Sử dụng API facelet rằng nên có sẵn trong JSF hiện tại (tôi chưa bao giờ làm việc thực tế với điều đó)

  • Sử dụng bất kỳ mẫu xử lý khác như vận tốc hoặc Freemarker để render HTML.

Các vấn đề liên quan