2012-03-13 12 views
11

Tôi muốn tạo thành phần JSF 2.0 tùy chỉnh nhưng không thể làm cho nó hoạt động. thành phần của tôi được định nghĩa như thế này:Thành phần tùy chỉnh JSF không được tìm thấy

@FacesComponent(value = "myCustomComponent") 
public class CommaSeperatedOutput extends UIComponentBase { ... } 

Các taglib trông như thế này:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version="2.0"> 
<namespace>http://www.company.com/tags</namespace> 
<tag> 
    <tag-name>custom</tag-name> 
     <component> 
     <component-type>myCustomComponent</component-type> 
     </component> 
</tag> 
</facelet-taglib> 

My khuôn mặt-config trông như thế này:

<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> 
<application> 
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 
</faces-config> 

tôi nhận được lỗi sau:

SEVERE: JSF1068: Component with componenttype myCustomComponent could not be instantiated. 
javax.faces.FacesException: Expression Error: Named Object: myCustomComponent not found. 

Không chắc chắn nếu nó là quan trọng, nhưng tôi đang sử dụng Spring 3.1 cùng với JSF 2.1 ở đây. Vì vậy, phụ thuộc được quản lý bởi Spring.

Bất kỳ ý tưởng gì đang xảy ra ở đây?

Giải pháp:

Có vẻ như mùa xuân là kẻ xấu ở đây. Tôi đã gỡ bỏ các chú thích @FacesComponent(value = "myCustomComponent") từ các thành phần và xác định nó thay vì trong tôi khuôn mặt-config như thế này:

<component> 
    <component-type>myCustomComponent</component-type> 
    <component-class>com.company.jsf.component.CommaSeperatedOutput</component-class> 
</component> 

Bây giờ nó hoạt động.

+2

này chắc chắn là một vấn đề mùa xuân. Phần JSF có vẻ ổn. Vì vậy, tôi đã thêm thẻ '[spring]' để bạn cũng nhận được sự chú ý từ các chàng trai mùa xuân. – BalusC

+1

thay vì Thành phần tùy chỉnh, bạn cũng có thể dùng thử Component Component. –

+0

Điều này làm việc một người bạn đời điều trị. – Makky

Trả lời

-1

Ngoài ra, và kể từ khi bạn đã cấu hình tập tin faces-config.xml của bạn để sử dụng các container mùa xuân, bạn có thể sử dụng các chú thích mùa xuân @Component("myCustomComponent")

+0

Không, điều đó có nghĩa là thành phần tùy chỉnh sẽ trở thành một singleton. Đó không phải là những gì tôi muốn ở đây. – flash

+1

Theo dõi chú thích thứ hai để thao tác phạm vi: @Scope ("request") hoặc @Scope ("prototype") chẳng hạn. Hãy thử bảng cheat này cho chú thích: http://refcardz.dzone.com/refcardz/spring-annotations – 8bitjunkie