0

我正在使用 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 页面(一个用于标题,一个用于菜单等)。

谢谢你,对我的英语感到抱歉。

4

1 回答 1

0
  1. 可以有尽可能多的<f:viewParam><f:viewAction>只要它们一起工作得很好,但请确保这些是为了初始化视图“JSF 页面”而不是支持 bean,@PostConstruct在烘焙 bean 上使用来初始化它们,但请记住<f:viewAction>默认情况下仅在 GET 请求上执行任何后续 POST(回发)请求都不会调用该操作,除非它具有onPostBack="true"属性。更多关于这些标签的信息可以在这个很好的答案中找到[可以做什么,<f:metadata>可以用来做什么?][1]<f:viewParam><f:viewAction>

  2. 使用 JSF 的模板功能将其放入模板中,如下所示:

模板.xhtml

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

页面.xhtml

<ui:composition template="template.xhtml">
    <ui:define name="metadata">
        <!-- whatever metadata you want to add-->
    </ui:define>
 </ui:comosition>
  1. 不,它是metadata每页一个标签,像上面的例子一样使用它。[1]:https ://stackoverflow.com/a/6377957/4649524
于 2019-04-19T08:37:43.720 回答