【问题标题】:How to make a primefaces dynamic toolbar如何制作一个primefaces动态工具栏
【发布时间】:2012-03-24 03:17:01
【问题描述】:

我从上周开始使用 PrimeFaces 3.1.1,它似乎是一个出色的可视化组件框架。我正在从 Richfaces 进行迁移,并试图让一切仅适用于 Prime 和 JSF2(2.1.6 版本)。

我的问题来自我必须实现的动态工具栏。有的操作是直接集成在工具栏(commandButtons)上的,有的操作里面有一些子操作,所以我只好用操作名做一个menuButton,把每一个操作都像menuitem一样添加到这里。这是我的代码:

<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>

我的问题是我只得到了第一个操作组件,它正确呈现了命令按钮并且它们的操作运行良好,但是在“#{!opBean._Clickable}”的情况下,我得到一个带有名称的菜单按钮,但里面没有菜单项。看起来嵌入的 ui:repeat 迭代做得不好。

我尝试了使用 c:foreachc:choosec:otherwise 标签的相同机会,在这种情况下,我得到了菜单在视觉上做得很好,commandButton 操作也很好,但是当我单击 menuItem 时,它说 opBean2 无法识别......但是正如我之前所说,我更喜欢专门使用 JSF 标签。有没有办法做到这一点?

【问题讨论】:

  • 顺便说一下,logedBean._apps 和 opBean._subOperaciones 都是集合。

标签: java jsf-2 primefaces


【解决方案1】:

我终于设法让它与 jsp 迭代标签一起工作,并将 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>

已编辑

它必须带有 jsp 标签,因为Primefaces Toolbar 没有特定的模型要集成到支持 bean 中以便在页面渲染期间构建。所以它必须在页面构建中。 Primefaces TabView 也发生了类似的情况,但他们设法解决了这个问题,现在 tabView 有一个内置的迭代器。查看相关提示。

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

已编辑 2

New PF MenuModel 似乎完全解决了这类问题。它将能够在 bean 上以编程方式构建菜单。从 4.0 开始提供。

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

【讨论】:

    【解决方案2】:

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

    目前我正在使用 Richfaces a4j:repeat 来解决这个问题。我还没有看到任何将 Primefaces 的 UI 组件与 a4j 元素一起使用的事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2011-01-07
      • 2021-03-05
      相关资源
      最近更新 更多