Мой составной компонент (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, вторая не важна,Метка отображает себя с тем же свойством модели, что и мой 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>
)?Я что-то здесь упускаю?
Спасибо за вашу помощь, эксперты!Марк