2012-03-13 4 views
11

Voglio creare un componente personalizzato JSF 2.0, ma non riesco a farlo funzionare. La mia componente è definita in questo modo:componente personalizzato JSF non viene trovato

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

Il taglib assomiglia a questo:

<?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> 

mio faces-config si presenta così:

<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> 

ottengo il seguente errore:

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

Non sono sicuro se è importante, ma sto usando Spring 3.1 insieme a JSF 2.1 qui. Quindi le dipendenze sono gestite da Spring.

Qualsiasi idea di quello che sta succedendo qui?

Soluzione:

Sembra come La primavera è il cattivo qui. Ho rimosso l'annotazione @FacesComponent(value = "myCustomComponent") dal componente e definiti invece nel mio faces-config in questo modo:

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

Ora funziona.

+2

Questo è sicuramente un problema di primavera. La parte JSF sembra a posto. Così ho aggiunto il tag '[spring]' in modo da attirare l'attenzione anche dei ragazzi di Spring. – BalusC

+1

invece di componente personalizzato si può anche dare Composite Component una prova. –

+0

Questo funziona come compagno di trattamento. – Makky

risposta

-1

In alternativa, e visto che hai configurato il file faces-config.xml di utilizzare la Primavera contenitore, è possibile utilizzare l'annotazione Primavera @Component("myCustomComponent")

+0

No, ciò significa che il componente personalizzato diventerebbe un singleton. Non è quello che volevo qui. – flash

+1

seguire con una seconda annotazione di manipolare il campo di applicazione: @Scope ("richiesta") o @Scope ("prototipo"), per esempio. Prova questo foglietto per le annotazioni: http://refcardz.dzone.com/refcardz/spring-annotations – 8bitjunkie