Проблема рендеринга составного компонента JSF 2 - PullRequest
1 голос
/ 05 июля 2011

Мой составной компонент (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>)?Я что-то здесь упускаю?

Спасибо за вашу помощь, эксперты!Марк

1 Ответ

2 голосов
/ 05 июля 2011

Это вполне ожидаемо.Составной компонент отображается .Только его дети не являются.Вместо этого вам нужно переместить атрибут rendered в составной компонент.

<sbic:pmsInputText name="#{person.name}" rendered="#{person.name.visible}" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...