我的复合组件(cc(创建一个inputText字段。重要的是,它是根据模型属性"可见"来渲染的。该模型通过parm"name"提供给组件。
<cc:interface>
<cc:attribute name="name" required="true"/>
</cc:interface>
<cc:implementation componentType="ch.sbi.pt.components.PMSInputText">
<h:inputText value="#{cc.attrs.name.value}" rendered="#{cc.attrs.name.visible}"/>
</cc:implementation>
在视图中,我有一个panelGrid,每行有2个单元格:第一行有一个标签和我的抄送,第二行不重要。标签使用与我的cc相同的模型属性来呈现自己。
<h:panelGrid columns="2">
<h:outputText value="Name" rendered="#{person.name.visible}"/>
<sbic:pmsInputText name="#{person.name}"/>
<h:outputText value="Next Label"/>
<sbic:pmsInputText name="#{something.name}"/>
</h:panelGrid>
如果"visible"-属性返回"false",则结果(也是问题(如下:没有任何组件被渲染(完美!(,但cc生成的HTML留下了一个空单元格(例如<td></td>
(,这导致了布局丑陋的HTML表(偏移一个单元格(:
<table>
<tbody>
<tr>
<td></td>
<td>Next Label</td>
</tr>
....
据我所知,这与生命周期(jstl与jsf(有关:我的cc在<h:outputText../>
之前渲染,但我如何摆脱空单元格(例如<td></td>
(?我是不是遗漏了什么?
感谢您的帮助,专家!Marc
这完全是意料之中的事。组合组件被渲染。只有它的孩子不是。您需要将rendered
属性移动到复合组件。
<sbic:pmsInputText name="#{person.name}" rendered="#{person.name.visible}" />