2010-01-28 2 views
1

Я новичок в JSF, поэтому у меня много проблем с ним. Я много решил, но теперь у меня проблема, когда я делаю составной компонент столбца.jsf 2 проблема составных компонентов при использовании f: facet

Это код:

myPage.xhtml:

<h:dataTable > 
    <util:myCol /> 
</h:dataTable> 

myCol.xhtml:

<composite:interface> 
</composite:interface> 
<composite:implementation> 
    <h:column> 
     <f:facet name="header" > 
      <h:outputText value="user name" /> 
     </f:facet> 
     <h:outputText value="some data" /> 
    </h:column> 
</composite:implementation> 

Проблема заключается в том, что колонка не делает.

Так что я немного изменился в коде:

myPage.xhtml:

<h:dataTable > 
    <h:column> 
     <util:myCol /> 
    </h:column> 
</h:dataTable> 

myCol.xhtml:

<composite:interface> 
</composite:interface> 
<composite:implementation> 
    <f:facet name="header" > 
     <h:outputText value="user name" /> 
    </f:facet> 
    <h:outputText value="some data" /> 
</composite:implementation> 

Здесь столбец оказывает, но заголовок "имя пользователя" не отображается ,

Как решить проблему? Заранее спасибо.

+0

Мое решение, см: http://stackoverflow.com/questions/7891650/using-compositeinsertfacet-renderfacet-does-not-work-inside-tdatatable/9091313#9091313 –

ответ

0

Правильно ли оно отображается, если у вас есть все JSF на одной странице? Сначала настройка JSF на одной странице может быть полезной, чтобы убедиться, что основы правильные; после этого вы можете разбить его на составные компоненты.

Кроме того, я заметил (используя JSF и Richfaces), что иногда вы не можете отдельно отделять «родителей» и «детей»; богатый: toolBar, и он богат: например, необходимо, чтобы панель инструментов была на одной и той же фактической странице. Я не работал с Facelets, так что у вас может быть другая ситуация.

Удачи.

Edit:

Попробуйте потянув заголовок из составного элемента управления, т.е .:

<h:dataTable > 
    <h:column> 
     *HEADER_FACET_GOES_HERE* 
     <util:myCol /> 
    </h:column> 
</h:dataTable> 
+0

благодарственное вы Я стараюсь, чтобы , когда я положил весь код на одной странице, работаю нормально , но такая же проблема, когда его разделить ... помогите мне :( – afi

+0

Я изменил свой ответ, и я думаю, что приведенный мной пример должен работать для вас сейчас –

1

Случай 1:

dataTable лечит только column контроль children как столбцы. Вы добавляете составной элемент управления к dataTable и column в составное управление.

Случай 2:

Проблема, вероятно, с тем, где фасетки устанавливаются. Они установлены на map на родительском элементе управления. Элемент управления, который вы добавляете фасет header, является составным элементом управления, а не column.

Примечание: ссылки предназначены для JSF 1.2 (JEE5), но принцип все еще применяется.

+0

Большое спасибо , но я не могу понять, что должно сделать, чтобы мое приложение работало с использованием cloumn композитного компонента с фасеткой ... – afi

+0

Возможно, вам придется использовать атрибут ' McDowell

+0

что вы подразумеваете в «Поскольку такого компонента нет, вам придется написать один» ... Я прочитал спецификацию, и я нашел UIColumn. , пожалуйста, дайте мне ясный пример о создании составной колонки .. спасибо, и мне очень жаль моих вопросов – afi

0

Использовать composite:facet в интерфейсе и composite:renderFacet или composite:insertFacet в реализации.

<composite:interface> 
    <composite:facet name="foo"/> 
    <composite:attribute name="value"/> 
</composite:interface> 
<composite:implementation> 
    <h:inputText id="value" value="#{cc.attrs.value}"/> 
    <composite:renderFacet name="foo"/> 
    <composite:insertChildren/> 
</composite:implementation> 

1

Я не знаю, если вы по-прежнему следовать этой теме, но у нас были проблемы вставляя грани из-за ошибки. Запуск содержимого внутри фасета с комментарием (комментарий на стороне сервера <! - - - ->) может решить проблему с отображением содержимого. Мы столкнулись с проблемами с фасетками, в которых есть один вкладыш .. добавление дополнительного комментария, поскольку первое утверждение является обходным решением проблемы.

С наилучшими пожеланиями, Гийс