<f:metadata>中的多个<f:viewaction>

时间:2019-04-18 00:33:38

标签: jsf jsf-2.3

我正在使用JSF 2.3开发CMS。我需要将GET参数传递到每个页面,以指示用户正在管理的站点。为此,我在所有页面中都使用<f:viewParam>,但是我有以下疑问:

  1. 是否可以对多个托管bean使用多个<f:viewAction>,如下例所示?
<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>

这可以,但是我不确定是否可以。

  1. 有没有一种方法可以避免在每个页面中复制site参数的<f:viewParam>?我尝试了includeViewParams,但如果我在源页面和目标页面(从page1.xhtml到page2.xhtml)中不包含<f:viewParam>,则无法正常运行

3)我可以定义多个<f:metadata>标签吗?例如,如果我使用模板和多个ManagedBeans pare页面(一个用于标题,一个用于菜单,依此类推)。

谢谢你,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

  1. 可以同时拥有尽可能多的<f:viewParamter><f:viewAction>,但请确保它们旨在初始化视图“ JSF页面”,而不是后备bean ,请在烤豆上使用@PostConstruct对其进行初始化,但要记住,默认情况下<f:viewAction>仅在GET请求上执行,任何后续的POST(回发)请求都不会调用该操作,除非它具有onPostBack="true"属性。 有关这些标签的更多信息,请参见此好答案 What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?

  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标签,请像上面的示例一样使用它。