我创建了一个Composite Component来模拟Primefaces's Column,而不是渲染到组件,它的渲染为(我还创建了其他组件来模拟Primefaces的PanelGrid和Row到使用DIV代替Table和TR)。代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="id" type="java.lang.String" required="false"/>
<cc:attribute name="span" type="java.lang.Integer" required="false" default="1" />
</cc:interface>
<cc:implementation>
<p:outputPanel id="#{cc.attrs.id}" layout="block"
styleClass="ui-grid-col-#{cc.attrs.span}">
<cc:insertChildren />
</p:outputPanel>
</cc:implementation>
</html>
当我使用outputLabel将组件引用到外部组件时,我的问题就出现了:
<ipem:column span="2">
<p:outputLabel value="#{msg['precadastro.titulo.nome_fantasia']}" for="fantasia"/>
</ipem:column>
<ipem:column span="10">
<p:inputText id="fantasia" size="80" maxlength="100"
value="#{preCadastroMB.preCadastro.nomeFantasia}" />
</ipem:column>
当我写这篇文章时,我收到了消息Cannot find component with identifier "fantasia" referenced from "painelCadastro:j_idt80:j_idt82:j_idt84".
我需要删除outputLabel中的for
属性。
我在StackOverflow中发现了一些我怀疑的问题。例如,在How to make a grid of JSF composite component?中,我们在父页面中有一个outputLabel,它引用了复合内部的一个组件。但是,就我而言,标签为inputText都在其自己的复合内。在How to create a composite component for a datatable column?中,label和inputText都在同一个合成中。
我们没有这个问题Column的Primefaces。他们如何管理这个?
谢谢,
Rafael Afonso