2013-05-26 6 views
5

ठीक है, मैंने पहले से ही बहुत से विषयों को ब्राउज़ किया है लेकिन उनमें से कोई भी मेरी समस्या का समाधान नहीं कर पाया है। मेरी समस्या सरल है: मैं अति सरल कस्टम घटक है:जेएसएफ 2 कस्टम घटक एनोटेशन काम नहीं करता

@FacesComponent("HelloWorldComponent") 
public class HelloWorldComponent extends UIComponentBase { 

public String getFamily() { 
return "my.custom.component"; 
} 

@Override 
public void encodeBegin(FacesContext ctx) throws IOException { 
String value = (String) getAttributes().get("value"); 

if (value != null) { 
ResponseWriter writer = ctx.getResponseWriter(); 
writer.write(value.toUpperCase()); 
} 
} 
} 

लेकिन दुर्भाग्य से मैं मिल त्रुटि:

JSF1068: Cannot instantiate component with component-type HelloWorldComponent 

मेरे taglib:

<?xml version="1.0" encoding="UTF-8"?> 
<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://example.com/test</namespace> 
<tag> 
<tag-name>helloWorldComponent</tag-name> 
<component> 
<component-type>HelloWorldComponent</component-type> 
</component> 
</tag> 
</facelet-taglib> 

मुख्य बात अगर मैं जगह है मेरी चेहरे-कॉन्फ़िगरेशन में कस्टम घटक सब कुछ सही काम करता है, लेकिन जेएसएफ में एक बहुत ही जिद्दी ग्रीनहोर्न के रूप में मुझे विश्वास है कि एनोटेशन को चेहरे-कॉन्फ़िगरेशन में कस्टम घटकों को पंजीकृत किए बिना काम करने का तरीका होना चाहिए। मैं कस्टम घटकों के बहुत सारे होने की उम्मीद करता हूं इसलिए मैं जानना चाहता हूं कि उन्हें शुद्ध एनोटेशन के साथ कैसे काम करना है ताकि चेहरे-कॉन्फ़िगरेशन में कोड की मिलियन लाइनों को न लिखें।

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 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" version="2.0"> 

<application> 
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 

<!-- <component> --> 
<!--   <component-type>HelloWorldComponent</component-type> --> 
<!--   <component-class>com.first.utils.view.components.HelloWorldComponent</component-class> --> 
<!--  </component> --> 

</faces-config> 

जब मैं घटक टैग को अपूर्ण करता हूं, तो सब कुछ काम करता है। लेकिन सचमुच ऐसा नहीं करना चाहते हैं, यह आलस्य नहीं है कि यह कंप्यूटर को जो करना चाहता है उसे करने के लिए मजबूर करता है;)।

परियोजना के मेरे संरचना: (का उपयोग कर im वसंत & Maven)

src 
~main 
~~java 
~~resources 
~~~META-INF 
~~~~faces-config.xml (duplicated as i read other topics) 
~~~~persistence.xml 
~~webapp 
~~~resources 
~~~~css 
~~~~utilComponent 
~~~WEB-INF 
~~~~templates 
~~~~faces-config.xml 
~~~~my.taglib.xml 
~~~~web.xml 
~~~*.html webpages.. 

विषय मैं पहले से ब्राउज़ कर चुके हैं: JSF custom component is not found
Cannot find annotated custom JSF2 component in jar
Custom Component using JSF

यह अगर मेरे पास है नहीं होगा आदर्श होगा मेरी टैगलिब को परिभाषित करने के लिए, लेकिन मुझे लगता है कि यह असंभव है? लेकिन पहली बात यह है कि मैं एनोटेशन काम करना चाहता हूं ... किसी भी मदद की सराहना

+1

मैं मेवेन नहीं करता हूं, लेकिन घटक वर्ग फ़ाइल '/ WEB-INF/कक्षाओं में या '/ WEB-INF/lib' में एक JAR फ़ाइल में होनी चाहिए (जिसमें'/META-INF/चेहरे- config.xml') काम करने के लिए '@ FacesComponent' प्राप्त करने के लिए। मेवेन द्वारा निर्मित WAR फ़ाइल को दोबारा जांचें और यदि आवश्यक हो तो कॉन्फ़िगरेशन को बदलें। – BalusC

+0

मेरी घटक वर्ग (हैलोवर्ल्ड कॉम्पोनेंट) मेरे प्रोजेक्ट से सामान्य कक्षाओं के साथ वेब-आईएनएफ/कक्षाओं में है, और मैं अटक गया हूं, मैंने वेब पर मिलने वाले सभी संकेत/समाधानों का प्रयास किया है – Zen

उत्तर

0

आप अनुप्रयोग सर्वर को पुन: प्रारंभ करने की कोशिश की है? मुझे यकीन नहीं है कि यह वसंत के साथ कैसा है, लेकिन जेबॉस में मेरे लिए एक समान समस्या हल हो गई। यह संभव है कि सर्वर प्रारंभ होने पर घटक स्वचालित रूप से पंजीकृत हो जाएं। पुनरारंभ किए बिना, उन्हें कुछ फ़ाइल में सूचीबद्ध होना होगा।

संबंधित मुद्दे