2012-03-16 5 views
4

Мы используем составные компоненты внутри других компонентов нашего проекта. Все прекрасно работает на JBoss 7.1.0, но на JBoss 7.1.1 мы получаем ошибки, как это:Вложенный составной компонент, разбитый на 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 

Мы попробовали решение, предложенное в this JBoss community thread, но это ничего не изменило наши проблемы (швами мы не the only one in this case, и решение может не работать, потому что мы также находимся в теге 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 для?

+0

Какие реализации JSF вы используете? Обратите внимание, поскольку композитный компонент MyFaces 2.1.6/2.0.12 не может содержать имена библиотек с косой чертой. Имя вашей библиотеки - «components/my», что неверно. Подробнее см. В [MYFACES-3454] (https://issues.apache.org/jira/browse/MYFACES-3454). – lu4242

+0

Мы используем Primefaces 3.2 и версию Mojarra, предоставленную JBoss 7.1.1. Мы всегда использовали такие имена библиотек без каких-либо проблем до последней версии JBoss. –

ответ

9

Valentinx в this thread нашел обходное решение.

Идея заключается в том, чтобы положить неисправные декларации пространства имен на самом <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

Спасибо! Для информации, отчет об ошибке: https://issues.jboss.org/browse/AS7-4366 –

+0

Спасибо за отчет об ошибке, я должен был сделать это сам :) –

+1

Ничего себе, раздражающе, но спасибо за информацию - массивный помогите, я бы потерял пару дней. –

0

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

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

Вместо этого, переехал Xmlns: layoutComp в шаблоне из <HTML> в контейнер (как «сНу» и «поверочного» работал):

<span xmlns:layoutComp="http://java.sun.com/jsf/composite/layoutComp"> 
     <layoutComp:navigation /> 
</span> 
Смежные вопросы