2015-11-30 3 views
1

Я в настоящее время используюJSF/Primefaces составного компонент с вложенным составным компонентом

  • Primefaces 3,5
  • JSF 2.1.6
  • GlassFish 3.1.2

и попытался положить составной компонент в составном компоненте.

Составной компонент:

 <?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:composite="http://java.sun.com/jsf/composite" xmlns:p="http://primefaces.org/ui" 
    xmlns:components="http://java.sun.com/jsf/composite/components"> 

<composite:interface> 
    <composite:attribute name="myobject" required="true" /> 
</composite:interface> 

<composite:implementation> 

    <p:panelGrid id="container">  
    <components:newEntry outputLabelId="labelId" outputLabelValue="#{msgs.label}" 
     selectOneMenuId="labelMenuId" selectOneMenuValue="#{myobject.value}" 
     selectOneMenuItems="#{myobject.values}" update=":targets"> 
    </components:newEntry> 
    </p:panelGrid> 

</composite:implementation> 
</html> 

Уплотненного составной компонент:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:composite="http://java.sun.com/jsf/composite" xmlns:p="http://primefaces.org/ui" 
    xmlns:components="http://java.sun.com/jsf/composite/components"> 

<composite:interface> 
    <composite:attribute name="outputLabelId" required="true" /> 
    <composite:attribute name="outputLabelValue" required="true" /> 
    <composite:attribute name="selectOneMenuId" required="true" /> 
    <composite:attribute name="selectOneMenuValue" required="true" /> 
    <composite:attribute name="selectOneMenuItems" required="true" /> 
    <composite:attribute name="update" required="true" /> 

    <composite:attribute name="rendered" default="true" /> 
</composite:interface> 

<composite:implementation> 
    <p:row> 
    <p:column> 
     <p:outputLabel id="#{cc.attrs.outputLabelId}" value="#{cc.attrs.outputLabelValue}" 
     rendered="#{cc.attrs.rendered}" /> 
    </p:column> 
    <p:column> 
     <p:selectOneMenu id="#{cc.attrs.selectOneMenuId}" value="#{cc.attrs.selectOneMenuValue}" 
     effect="none" filter="true" filterMatchMode="contains" rendered="#{cc.attrs.rendered}"> 
     <f:selectItems value="#{cc.attrs.selectOneMenuItems}" /> 
     <p:ajax event="change" update="#{cc.attrs.update}" /> 
     </p:selectOneMenu> 
    </p:column> 
    </p:row> 
</composite:implementation> 

</html> 

Однако я не получаю сообщение об ошибке или вынесенный элемент, который является довольно запутанным.

Только при перемещении вложенного компонента на том же уровне, что и его родительский элемент, это визуализированный вложенный компонент.

Это не поддерживается в 2.1.6 или я что-то не так?

+0

_ «Не поддерживается ли это в 2.1.6»? _ Попробовал? – Kukeltje

+0

Я думал, что PrimeFaces основан на JSF. Вы имеете в виду простой JSF 2.1.6 вместо PrimeFaces внутри? – Dr4gon

+0

Извините, должен был заявить: Пробовал новую версию jsf. Мой плохой ... – Kukeltje

ответ

1

Я только что вспомнил, что раньше у меня была аналогичная проблема с первыми лицами panelGrid. Как-то панель panelGrid не принимает вложенный компонент и просто проглатывает его без ошибок или предупреждений.

Замена штрих лица panelGrid с одной JSF решает эту проблему:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:composite="http://java.sun.com/jsf/composite" xmlns:p="http://primefaces.org/ui" 
    xmlns:components="http://java.sun.com/jsf/composite/components"> 

<composite:interface> 
    <composite:attribute name="myobject" required="true" /> 
</composite:interface> 

<composite:implementation> 

    <h:panelGrid id="container">  
    <components:newEntry outputLabelId="labelId" outputLabelValue="#{msgs.label}" 
     selectOneMenuId="labelMenuId" selectOneMenuValue="#{myobject.value}" 
     selectOneMenuItems="#{myobject.values}" update=":targets"> 
    </components:newEntry> 
    </h:panelGrid> 

</composite:implementation> 
</html> 

Я проверил премьер сталкивается 5.0 из-за зависимости 2.3 JSF. В этой версии проблема все еще присутствовала.