Как сделать простейшую динамическую панель инструментов - PullRequest
4 голосов
/ 06 марта 2012

Я работаю с PrimeFaces 3.1.1 с прошлой недели, и это, кажется, отличный фреймворк для визуальных компонентов.Я делаю миграцию с Richfaces и пытаюсь заставить все работать только с Prime и JSF2 (версия 2.1.6).

Моя проблема связана с динамической панелью инструментов, которую я должен реализовать.Некоторые операции интегрированы непосредственно на панели инструментов (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>

Моя проблема в том, что я получаю только первые компоненты операций, он правильно отображает кнопки CommandButtons, и их действия работают хорошо, однако в случае "# {! OpBean._Clickable} "Я получаю menuButton с именем, но без меню внутри.Похоже на встроенный интерфейс: повторение итерации не очень хорошо сделано.

Я использовал ту же возможность, используя c: foreach , c: выберите и c: в противном случае теги , и в этом случае я получаюменю визуально хорошо выполнено, действия commandButton также работают хорошо, но когда я нажимаю в menuItem, он говорит, что opBean2 не распознается ... Однако, как я уже говорил, я предпочитаю использовать исключительно теги JSF.Есть ли способ сделать это?

Ответы [ 2 ]

5 голосов
/ 07 марта 2012

Мне, наконец, удалось заставить его работать с тегами итерации jsp и изменить атрибуты actionListener тегов menuitem для атрибутов действия.Вот мой код:

    <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 не имеет конкретной модели длябыть интегрированным в бэк-компонент для создания во время рендеринга страницы.Так должно быть в сборке страницы.Подобное происходило с Primefaces TabView , но им удалось решить эту проблему, и теперь у tabView есть встроенный итератор.Посмотрите на соответствующий вопрос.

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

РЕДАКТИРОВАНИЕ 2

Новая модель меню PF, кажется, решает эту проблему вообще.Он сможет построить меню программно на бобе.Доступно с 4.0.

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

0 голосов
/ 06 марта 2012

Я думаю, что это связано с вложенными ui:repeat элементами. Я также сталкивался с подобной проблемой прежде, вложив их и не выяснил, как заставить ui:repeat работать правильно.

В настоящее время я использую Richfaces a4j:repeat для этой проблемы. Я не видел ни одного случая использования UI-компонентов Primefaces с a4j элементами.

...