Условный вызов rich: всплывающая панель - PullRequest
0 голосов
/ 22 января 2012

Привет всем Я хотел бы открыть rich: popupPanel внутри условного выражения, на самом деле я пытаюсь что-то вроде этого:

onclick="#{searchBackingBean.showLoginPanel==true ? #{rich:component('loginPopup')}.show();':''}"

Однако я получаю ошибки, связанные с EL, как я должен написать это правильно ?. Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Вы не можете вкладывать выражения EL.Я предлагаю переписать выражение следующим образом, чтобы условие было делегировано JavaScript:

onclick="if (#{searchBackingBean.showLoginPanel}) #{rich:component('loginPopup')}.show();"

(обратите внимание, что я удалил лишнее сравнение == true, поскольку это не имеет смысла, поскольку метод возвращает/ печатает уже логическое значение)

Обратите внимание, что это работает только в компонентах <rich:xxx> и <a4j:xxx>, поскольку они усовершенствовали атрибуты on* для повторной оценки выражения EL в обратных передачах.Стандартные компоненты JSF <h:xxx> этого не делают.Вам нужно обойти это с атрибутом rendered:

<h:commandButton>
    <f:ajax render="script" />
</h:commandButton>
<h:panelGroup id="script">
    <h:panelGroup rendered="#{searchBackingBean.showLoginPanel}">
        <script>#{rich:component('loginPopup')}.show();</script>
    </h:panelGroup>
</h:panelGroup>
0 голосов
/ 23 января 2012

Что я делаю, так это помещаю панель внутри группы панелей или какого-либо другого контейнера, который можно визуализировать. Затем установите флаг рендеринга этого контейнера в зависимости от условия и вызовите рендер этого контейнера, когда он, возможно, должен быть показан.

как то так:

<a4j:commandButton ... render="popup"/>

<a4j:outputPanel id="popup" rendered="#{searchBackingBean.showLoginPanel}">
    <script>
        #{rich:component('loginPopup')}.show();
    </script>
</a4j:outputPanel>

MAG, Мило ван дер Зее

...