2012-03-13 37 views
11

Quiero crear un componente personalizado JSF 2.0 pero no puedo hacerlo funcionar. Mi componente se define así:El componente personalizado JSF no se encuentra

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

El taglib se ve así:

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

Mi caras-config se ve así:

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

me sale el siguiente error:

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

No estoy seguro de si es importante, pero estoy usando Spring 3.1 junto con JSF 2.1 aquí. Entonces, las dependencias son administradas por Spring.

¿Alguna idea de lo que está sucediendo aquí?

Solución:

parece que la primavera es el malo aquí. He quitado la anotación @FacesComponent(value = "myCustomComponent") del componente y se define su lugar en mi caras-config como esto:

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

ahora funciona.

+2

Este es sin duda un problema primavera. La parte JSF se ve bien. Así que agregué la etiqueta '[spring]' para que también recibas atención de los chicos de Spring. – BalusC

+1

en lugar de Componente personalizado también puede probar Composite Component. –

+0

Esto funciona como un compañero de tratamiento. – Makky

Respuesta

-1

Por otra parte, y dado que usted ha configurado el archivo faces-config.xml para utilizar el contenedor de primavera, se puede usar la anotación primavera @Component("myCustomComponent")

+0

No, eso significa que el componente personalizado se convertiría en un singleton. Eso no es lo que quería aquí. – flash

+1

Haga un seguimiento con una segunda anotación para manipular el alcance: @Scope ("solicitud") o @Scope ("prototipo"), por ejemplo. Prueba esta hoja de trucos para anotaciones: http://refcardz.dzone.com/refcardz/spring-annotations – 8bitjunkie

Cuestiones relacionadas