2012-05-25 34 views
6

Có thể thực hiện điều gì đó giống như thế này trong jsf không?JSF 1.2: Tôi có thể tạo thành phần có thể tái sử dụng bên trong chế độ xem JSF

<ui:composition> 
    <x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode> 
    code... 
    <x:use component="editScreen"/> 
</ui:composition 

Tôi biết tôi có thể tạo thành phần của riêng mình và đăng ký nó trong thẻ jsf tagLib, nhưng tôi chỉ cần HTML tái sử dụng trong tệp xem jsf.

+0

Bạn có đang sử dụng JSF 2.0 không? –

+0

Xin lỗi, tôi quên thêm phần này vào phần tóm tắt. Tôi sử dụng 1,2 – Daggeto

Trả lời

4

Trong Facelets 1.x bạn có thể tạo tệp thẻ cho mục đích này.

Dưới đây là ví dụ về khởi đầu cơ bản. Tạo /WEB-INF/tags/some.xhtml:

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <h:outputText value="#{foo}" /> 
</ui:composition> 

Xác định nó trong /WEB-INF/my.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE facelet-taglib PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" 
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib> 
    <namespace>http://example.com/jsf/facelets</namespace> 
    <tag> 
     <tag-name>some</tag-name> 
     <source>/WEB-INF/tags/some.xhtml</source> 
    </tag> 
</facelet-taglib> 

đăng ký nó trong /WEB-INF/web.xml:

<context-param> 
    <param-name>facelets.LIBRARIES</param-name> 
    <param-value>/WEB-INF/my.taglib.xml</param-value> 
</context-param> 

(lưu ý, khi bạn có nhiều, sử dụng dấu chấm phẩy ; để tách chúng)

Cuối cùng chỉ cần khai báo nó trong các mẫu trang chính của bạn.

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:my="http://example.com/jsf/facelets" 
> 
    <my:some foo="value1" /> 
    <my:some foo="value2" /> 
    <my:some foo="value3" /> 
</ui:composition> 

Một ví dụ cao cấp hơn có thể được tìm thấy ở đây: How to make a grid of JSF composite component? Lưu ý: JSF 2.0 nhắm mục tiêu, nhưng với những thay đổi nhỏ dựa trên ví dụ trên nó hoạt động tốt trên Facelets 1.x.

+0

Cảm ơn phương pháp này, nhưng tôi nghĩ có phương pháp để tạo thành phần có thể tái sử dụng bên trong một tệp jsf mà không cần đăng ký thẻ. :) – Daggeto

+0

Tác phẩm này hoạt động, ngoại trừ phần tử ' /WEB-INF/tags/some.xhtml' trong 'my.taglib.xml'. Tôi phải thay đổi nó thành ' thẻ/some.xhtml' để làm cho nó hoạt động. – acdcjunior

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