Подтвердить что ты не робот

Пользовательский компонент JSF не найден

Я хочу создать пользовательский компонент JSF 2.0, но не могу заставить его работать. Мой компонент определяется следующим образом:

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

Taglib выглядит следующим образом:

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

Мои лица-config выглядят следующим образом:

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

Я получаю следующую ошибку:

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

Не уверен, что это важно, но я использую Spring 3.1 вместе с JSF 2.1 здесь. Таким образом, управление зависимостями осуществляется с помощью Spring.

Любая идея, что здесь происходит?

Решение:

Кажется, что Spring - плохой парень. Я удалил аннотацию @FacesComponent(value = "myCustomComponent") из компонента и определил ее вместо этого в my faces-config следующим образом:

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

Теперь он работает.

4b9b3361

Ответ 1

В качестве альтернативы, и поскольку вы настроили файл faces-config.xml для использования контейнера Spring, вы можете использовать аннотацию Spring @Component("myCustomComponent")