множественныйв - PullRequest
       3

множественныйв

0 голосов
/ 18 апреля 2019

Я занимаюсь разработкой CMS с использованием JSF 2.3.Мне нужно передать параметр GET на каждую страницу, указывающую сайт, которым управляет пользователь.Для этого я использую <f:viewParam> на всех страницах, но у меня есть следующие сомнения:

  1. Можно ли использовать несколько <f:viewAction> для нескольких управляемых bean-компонентов, как в следующем примере?
<f:metadata>
    <f:viewParam name="form" value="#{editFormWebBean.formIdParam}"/>
    <f:viewParam name="site" value="#{headerWebBean.siteIdParam}"/>
    <f:viewAction action="#{editFormWebBean.init}" />
    <f:viewAction action="#{headerWebBean.init}" />
</f:metadata>

Это работает, но я не уверен, что все в порядке.

Есть ли способ избежать репликации на каждой странице <f:viewParam> для параметра сайта?Я попытался с includeViewParams, но не работает, если я не включаю <f:viewParam> на исходной и целевой странице (от page1.xhtml до page2.xhtml)

3) Могу ли я определитьнесколько <f:metadata> тегов?Например, если я использую шаблоны и несколько страниц страниц ManagedBeans (одна для заголовка, другая для меню и т. Д.).

Спасибо и извините за мой английский.

1 Ответ

0 голосов
/ 19 апреля 2019
  1. нормально иметь столько <f:viewParamter> и <f:viewAction>, пока они хорошо работают вместе, но, пожалуйста, убедитесь, что они предназначены для инициализации представления "JSF-страница", а не для компонентов поддержки, используйте @PostConstruct на хлебных бобах, чтобы инициализировать их, но помните, что <f:viewAction> выполняется только по запросу GET, по умолчанию любые последующие запросы POST (обратная передача) не вызывают действие, если у него нет атрибута onPostBack="true". больше об этих тегах можно найти в этом великолепном ответе Для чего можно использовать <f:metadata>, <f:viewParam> и <f:viewAction>?

  2. поместите его в шаблон, используя шаблонизатор JSF, например:

template.xhtml

<f:metadata>
   <f:viewParam name="site" value="#{headerWebBean.siteIdParam}"/>
   <ui:insert name="metadata"/>
</f:metadata>

page.xhtml

<ui:composition template="template.xhtml">
    <ui:define name="metadata">
        <!-- whatever metadata you want to add-->
    </ui:define>
 </ui:comosition>
  1. нет, это один metadata тег на странице, используйте его, как в примере выше.
...