2012-03-06 63 views
3

自从上周开始,我正在使用PrimeFaces 3.1.1,它似乎是一个优秀的可视化组件框架。我正在从Richfaces进行迁移,并尝试只使用Prime和JSF2(2.1.6版本)来使所有内容都可用。如何制作primefaces动态工具栏

我的问题伴随着我必须实现的动态工具栏。有些操作直接集成在工具栏(commandButtons)中,其他操作内部有一些子操作,所以我必须使用操作名称来执行menuButton,并在菜单项中添加每一项操作。这里是我的代码:

<h:panelGroup id="Texto_Header" layout="block"> 
     <h:form> 
      <p:toolbar> 
       <p:toolbarGroup> 
        <!-- Operaciones de aplicación --> 
        <ui:repeat value="#{logedBean._apps}" var="opBean"> 
          <!-- OPERACION PRINCIPAL EJECUTABLE --> 
          <h:panelGroup rendered="#{opBean._Clickable}"> 
           <p:commandButton ajax="true" value="#{opBean._Nombre}" 
            action="#{opBean.actionOperationClick}" /> 
          </h:panelGroup> 
          <!-- OPERACION PRINCIPAL CON SUBOPERACIONES --> 
          <h:panelGroup rendered="#{!opBean._Clickable}"> 
           <p:menuButton value="#{opBean._Nombre}"> 
            <ui:repeat value="#{opBean._subOperaciones}" var="opBean2"> 
             <p:menuitem ajax="true" value="#{opBean2._Nombre}" 
              actionListener="#{opBean2.actionOperationClick}" /> 
            </ui:repeat> 
           </p:menuButton> 
          </h:panelGroup> 
        </ui:repeat> 
       </p:toolbarGroup> 
      </p:toolbar> 
     </h:form> 
    </h:panelGroup> 

我的问题是,我只得到了第一个操作部件,它正确地呈现CommandButton控件和他们的行动的效果不错,但是在“#的情况下{!opBean._Clickable} “我得到一个带有名字的menuButton,但里面没有menuitem。它看起来像嵌入式用户界面:重复迭代没有做好。

我曾尝试使用相同c机会:的foreachC:选择C:否则标签,在这种情况下,我得到的菜单视觉做得好,的commandButton动作过于运作良好,但是当我点击一个menuItem,它说opBean2不被识别......但正如我之前所说的,我更喜欢独占使用JSF标签。有没有办法做到这一点?

+0

顺便说一句,这两个logedBean._apps和opBean._subOperaciones收藏集。 – 2012-03-06 16:09:10

回答

4

我终于设法使它与jsp迭代标签一起工作,并更改了actionite属性的menuitem标签的actionListener属性。这里是我的代码:

<h:panelGroup id="Texto_Header"> 
    <h:form> 
     <p:toolbar> 
      <p:toolbarGroup> 
       <!-- Operaciones de aplicación --> 
       <c:forEach items="#{logedBean._apps}" var="opBean"> 
        <!-- MAIN OPERATION --> 
        <h:panelGroup rendered="#{opBean._Clickable}"> 
         <p:commandButton value="#{opBean._Nombre}" 
          action="#{opBean.actionOperationClick}" update=":linkPanel" /> 
        </h:panelGroup> 
        <!-- OPERATION WITH SUBOPERATIONS --> 
        <h:panelGroup rendered="#{!opBean._Clickable}"> 
         <p:menuButton value="#{opBean._Nombre}"> 
          <c:forEach items="#{opBean._subOperaciones}" var="opBean2"> 
           <p:menuitem value="#{opBean2._Nombre}" 
            action="#{opBean2.actionOperationClick}" update=":linkPanel" /> 
          </c:forEach> 
         </p:menuButton> 
        </h:panelGroup> 
       </c:forEach> 
      </p:toolbarGroup> 
     </p:toolbar> 
    </h:form> 
</h:panelGroup> 

EDITED

它必须与JSP标签,因为Primefaces Toolbar没有具体的模型集成在一个后台bean为了页面渲染期间建成。所以它必须在页面构建中。与Primefaces TabView类似,但他们设法解决它,现在tabView有一个内置的迭代器。看看相关的提示。

https://stackoverflow.com/a/4057370/1199132

组织编写

新PF MenuModel似乎根本解决这类问题。它将能够在bean上以编程方式构建菜单。可从4.0起。

http://blog.primefaces.org/?p=2594

+0

不要'忘记标记这篇文章作为答案 – 2012-03-07 16:41:42

0

我认为这与嵌套的ui:repeat元素有关。我之前也遇到过类似的问题,通过嵌套它们并没有弄清楚如何让ui:repeat正常工作。

目前我正在使用Richfaces a4j:repeat解决此问题。我还没有看到使用Primefaces的UI组件使用a4j元素的任何事件。