多 在

问题描述 投票:0回答:1

我正在使用JSF 2.3开发CMS。我需要将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>

这有效,但我不确定它是否正常。

  1. 有没有办法避免在每个页面中复制<f:viewParam>的站点参数?我尝试使用includeViewParams,但如果我在源页面和目标页面中不包含<f:viewParam>(从page1.xhtml到page2.xhtml),则无效

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

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

jsf jsf-2.3
1个回答
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标签,使用它像上面的例子。
© www.soinside.com 2019 - 2024. All rights reserved.