1

我的复合组件 (cc) 创建了一个 inputText-Field。重要的部分是,它的呈现取决于模型属性“可见”。模型通过参数“名称”提供给组件。

<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>

在视图中,我有一个具有 2 个单元格/行的 panelGrid:第一行有一个标签和我的 cc,第二个并不重要。该标签以与我的 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”-property 返回“false”:没有组件被渲染(完美!)但是 cc 生成的 HTML 留下了一个空单元格(例如<td></td>),这导致了一个丑陋的布局 HTML - 表格(偏移一个单元格):

<table>
<tbody>
<tr>
<td></td>
<td>Next Label</td>
</tr>
....

据我了解,这与生命周期(jstl 与 jsf)有关:我的 cc 在之前渲染,<h:outputText../>但我怎样才能摆脱空单元格(例如<td></td>)?我在这里错过了什么吗?

谢谢各位高手的帮助!马克

4

1 回答 1

2

这是完全可以预料的。呈现复合组件。只有它的孩子不是。您需要将rendered属性移动到复合组件。

<sbic:pmsInputText name="#{person.name}" rendered="#{person.name.visible}" /> 
于 2011-07-05T09:36:30.950 回答