2011-01-30 3 views
3

В настоящее время я пытаюсь внедрить технологию webpart с JavaServer Faces 2.0 с технологией просмотра Facelets для образовательных целей. Я создал шаблоны facelet, пользовательские компоненты facelet и создал несколько «шаблонных» клиентов facelet. Но в одном я застрял. Я не могу динамически загружать элементы управления и помещать их cc:attributes.Атрибуты динамической загрузки Java и составных компонентов Java

Если у меня есть страница, например, со статическим текстом или связать ее с ManagedBean, свойство ui:include все работает хорошо.

<ui:define name="right-column"> 
    right-column asd 
    <h:link outcome="asdf" value="link_get"> 
     <f:param name="aa" value="123" /> 
     <f:param name="a" value="123 dd + 20" /> 
    </h:link> 
    <h:commandLink action="asdf?faces-redirect=true" value="asdf"> 
     <f:param name="aa" value="123" /> 
    </h:commandLink><br /> 
    <ui:include src="./resources/Controls/CategoryTree.xhtml"/><br /> 
    This works even if I put src with MenageBean property. 
    <ui:include src="#{browseProducts.incudePath}"/> 
</ui:define> 

Вот мой контроль facelet (связывание данных внутри этого элемента управления в #{TreeBean.root}:

<!-- NO INTERFACE --> 
<cc:interface> 
</cc:interface> 

<!-- IMPLEMENTATION --> 
<cc:implementation> 
<!-- This is a very simply scaffolding for Category Three Control. 
    --> 
    <p:tree value="#{TreeBean.root}" var="node" 
      expandAnim="FADE_IN" collapseAnim="FADE_OUT"> 
     <p:treeNode> 
      <h:outputText value="#{node}" /> 
     </p:treeNode> 
    </p:tree> 

</cc:implementation> 

Но у меня есть проблема, когда ui:include указывает на контроль с cc:attribute я не знаю, как инициализировать. . этот атрибут из резервного боб и делать «вещи»

Например, у меня есть эта страница:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./resources/layout/Template.xhtml" 
       xmlns:sc="http://java.sun.com/jsf/composite/Controls"> 

    <ui:define name="right-column"> 
     <sc:dummy ItemCount="10" /> 
     <ui:include src="./resources/Controls/dummy.xhtml" /> 
    </ui:define> 
</ui:composition> 

Здесь идет составной элемент управления: код

<cc:interface> 
     <cc:attribute name="ItemCount" required="true" 
         shortDescription="This attribute is meaningful " /> 
    </cc:interface> 
    <!-- IMPLEMENTATION --> 
    <cc:implementation> 
    <!-- How to pass ItemCount to my dummy bean to create so many items in 
    list as ItemCount value --> 
     <ui:repeat value="#{dummy.dummyList}" var="dummyItem"> 
      <h:outputText value="#{dummyItem}" /> 
     </ui:repeat> 
    </cc:implementation> 

И поддержка боба:

public ArrayList<String> getDummyList() { 
    //Here I try to get dummy list work. 
    dummyList = new ArrayList<String>(getDummyCount()); 
    for (int i=0;i< getDummyCount();i++){ 
     dummyList.add(i + "" + i); 
    } 
    return dummyList; 
} 

Как это может быть сделано?

ответ

0

Я думаю, что у вас есть две проблем:

  1. вызов метода с параметром из составного компонента
  2. с указанием некоторых параметров на прилежащую страницу

Для 1., так как JSF 2, вы можете вызвать метод напрямую, указав параметр (который должен быть частью подписи метода):

 <ui:repeat value="#{dummy.getDummyList(cc.attrs.dummyCode)}" var="dummyItem"> 
      <h:outputText value="#{dummyItem}" /> 
     </ui:repeat> 

Но я подозреваю, что вы пытаетесь использовать поддержку для чего-то, для чего она не предназначена. Возможно, вам будет интересно написать код java для вашего составного компонента, который отличается. Однако трудно освоить, если вы новичок. Сначала я попытался по-разному проектировать мои страницы и взаимодействия с бобами. Я не знаю, какую проблему вы пытаетесь решить, но с первого взгляда это решение выглядит слишком сложно.

Для 2. вы должны посмотреть на ui: param. Быстрый поиск в Google дает мне следующее: http://www.jsfcentral.com/articles/facelets_3.html

+0

Спасибо за помощь. Я проверю это, когда найду время :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^