JSF 2复合组件渲染问题

时间:2011-07-05 09:04:29

标签: jsf jsf-2 lifecycle composite-component

我的复合组件(cc)创建一个inputText-Field。重要的是,它根据模型属性“可见”进行渲染。该模型通过参数“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>

在视图中我有一个带有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(偏移一个单元格):

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

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

Thanx为您提供帮助,专家! 马克

1 个答案:

答案 0 :(得分:2)

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

<sbic:pmsInputText name="#{person.name}" rendered="#{person.name.visible}" />