2013-10-08 3 views
0

Я пытаюсь создать составной компонент, который отображает значения в качестве панели наложения. Но он возвращает ошибку ниже; Не удается найти компонент 'j_idt58: reviewDataTable: 0: overrideCol' в представленииНевозможно использовать p: overlaypanel внутри составного компонента

overrideVersionDetails.xhtml: (составной компонент)

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:cc="http://java.sun.com/jsf/composite" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <cc:interface> 
     <cc:attribute name="forId" type="java.lang.String" required="true" /> 
     <cc:attribute name="forValue" type="java.lang.Object" /> 
    </cc:interface> 

    <cc:implementation> 
     <p:overlayPanel for="#{cc.attrs.forId}" my="left bottom"> 
      #{cc.attrs.forValue} 
     </p:overlayPanel> 
    </cc:implementation> 
</ui:composition> 

Его использовали в другой странице:

<h:form> 
.... 
... 
<p:dataTable .....> 
.... 
    <p:column sortBy="#{dto.isSameCycleOverride}" width="100"> 
     <f:facet name="header"> 
      Override 
     </f:facet> 
     <h:commandLink id="overrideCol" binding="#{overrideCol}" 
     value="#{(dto.isSameCycleOverride) ? 'Yes' : 'No'}" /> 
    <comp:overrideVersionDetails forId="#{overrideCol.clientId}" 
    forValue="#{dto.message}" /> 
    </p:column> 
.... 
</p:dataTable> 
</h:form> 

Любая помощь действительно оценили.

ответ

0

Я не работаю с Primefaces, но с RichFaces я хотел бы использовать:

<comp:overrideVersionDetails forId="#{rich:clientId('overrideCol')}" 
          forValue="#{dto.message}" /> 

делать то, что вы хотите.

С небольшой помощью от SO: Rich Faces rich:clientId in Primefaces? кажется вы можете сделать это:

... 
<h:commandLink id="overrideCol" value="#{(dto.isSameCycleOverride) ? 'Yes' : 'No'}" /> 
<comp:overrideVersionDetails forId="#{p:component('overrideCol')}" 
forValue="#{dto.message}" /> 
... 

Теперь, чтобы увидеть, если это работает лучше, чем использование binding в DataTable ...

Смежные вопросы