【问题标题】:Can I use multiple managed bean in the same xhtml page? [closed]我可以在同一个 xhtml 页面中使用多个托管 bean 吗? [关闭]
【发布时间】:2013-09-20 14:42:06
【问题描述】:

当有数据在多个页面中重复时(参考示例) 是我可以加载到单个托管 bean 并在同一页面中使用多个托管 bean。 它的影响是什么?

【问题讨论】:

标签: jsf jsf-2 managed-bean


【解决方案1】:

我可以在同一个 xhtml 页面中使用多个托管 bean 吗?

是的,你可以,我强烈建议你尝试一下:)。

它的影响是什么?

这取决于托管 bean 范围。一个很好的例子是注册一个新地址并在页面顶部显示登录的用户信息,类似于您添加新送货地址的亚马逊网站。

在这种情况下,您可以拥有三个托管 bean:

  • 一个@SessionScoped bean,它将显示登录的用户信息。在亚马逊视图的情况下,它只显示名字。
  • 将提供国家/地区数据的@ApplicationScoped bean。这个信息不会经常改变(至少每天都会有一个新的国家诞生=\)。
  • @ViewScoped bean 将处理请求数据、错误消息和注册。

上面在 Facelets 代码中的解释示例:

<div id="top">
    Hello #{sessionBean.user.firstName}
</div>
<div id="body">
    <h1>Add an address</h1>
    <h:form id="frmAddress">
        <h:panelGrid columns="2">
            <h:outputText value="Address" />
            <h:inputText id="txtAddress" value="#{viewBean.address}" />
            <h:outputText value="Country" />
            <h:selectOneMenu id="ddlCountry" value="#{viewBean.selectedCountry}">
                <f:selectItems value="#{applicationBean.countries}" var="country"
                    itemLabel="#{country.name}" itemValue="#{country}" />
            </h:selectOneMenu>
        </h:panelGrid>
        <h:messages id="msgErrors" />
        <h:commandButton value="Save address" action="#{viewBean.saveAddress}" />
    </h:form>
</div>

注意:这既不是好的也不是坏的做法,只是试一试看看它的行为方式。影响是定义每个托管 bean 在页面中的行为方式,因此根据您定义 bean 的方式,这将是非常整洁或非常糟糕的体验。

相关信息:

【讨论】:

  • Luiggi,这是一个非常好的答案。
猜你喜欢
  • 2015-01-16
  • 2015-04-11
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多