Вложенный составной компонент поврежден в JBoss 7.1.1 - PullRequest
4 голосов
/ 16 марта 2012

Мы используем композитные компоненты внутри других компонентов в нашем проекте. Все отлично работает на JBoss 7.1.0 , но на JBoss 7.1.1 мы получаем следующие ошибки:

No handlers found for exception javax.faces.view.facelets.TagException: 
/resources/components/my/bigComponent.xhtml @21,47 <my:nestedComponent> 
Tag Library supports namespace: http://java.sun.com/jsf/composite/components/my, 
but no tag was defined for name: nestedComponent

Мы попробовали решение, предложенное в этой теме сообщества JBoss , но оно ничего не изменило в нашей проблеме (швы, мы не единственные в этом случае , и решение может не работает, потому что мы также находимся в теге ui:define из файла шаблона).

Вот наши два компонента:

Вложенность:

<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:cc="http://java.sun.com/jsf/composite"
  xmlns:my="http://java.sun.com/jsf/composite/components/my" >

<cc:interface componentType="...">
    <h:panelGroup>
        <cc:attribute name="someAttribute" />
    </h:panelGroup>
</cc:interface>

<cc:implementation>
     <my:nestedComponent content="a text" />
</cc:implementation>
</html>

Вложенные:

<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:cc="http://java.sun.com/jsf/composite">

<cc:interface>
    <cc:attribute name="content" />
</cc:interface>

<cc:implementation>
    <h:outputText value="#{cc.attrs.content}" />
</cc:implementation>

</html>

Это регрессия? Мы делаем что-то не так? В 1-й ссылке предлагаемое решение подразумевает в компоненте вложенности что-то вроде этого:

<composite:interface>
    <composite:facet name="greet1"/>
    <composite:facet name="greet2"/>
</composite:interface>
<composite:implementation>
    <lib:greet1 name="Stan" />
    <lib:greet2 name="Silvert" />
</composite:implementation>

Что это за composite:facet без composite:renderFacet для?

Ответы [ 2 ]

9 голосов
/ 21 марта 2012

Valentinx в в этой теме нашел обходной путь.

Идея состоит в том, чтобы поместить ошибочные объявления пространства имен в саму <composite:implementation>, поэтому

<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:cc="http://java.sun.com/jsf/composite"
  xmlns:my="http://java.sun.com/jsf/composite/components/my" >
<cc:interface />
<cc:implementation>
     <my:nestedComponent content="a text" />
</cc:implementation>
</html>

становится

<!DOCTYPE html PUBLIC ...>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:cc="http://java.sun.com/jsf/composite" >
<cc:interface />
<cc:implementation xmlns:my="http://java.sun.com/jsf/composite/components/my">
     <my:nestedComponent content="a text" />
</cc:implementation>
</html>

(обратите внимание на тег <cc:implementation xmlns:my="http://java.sun.com/jsf/composite/components/my">)

Это работает как шарм!

0 голосов
/ 12 августа 2014

Спасибо Ксавьеру за ответ: это правильно! Я хотел добавить комментарий, но у меня нет представителя. сделать это.

В моем случае проблема в небольшой разнице с ошибкой в ​​шаблоне (не в составном: реализация), и я нашел решение, которое не включает ...

Вместо этого перемещено xmlns: layoutComp в шаблоне из в контейнер (сработали и div, и span):

<span xmlns:layoutComp="http://java.sun.com/jsf/composite/layoutComp">
        <layoutComp:navigation />
</span>
...