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

时间:2013-09-20 14:42:06

标签: jsf jsf-2 managed-bean

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

1 个答案:

答案 0 :(得分:17)

  

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

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

  

它有什么影响?

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

在这种情况下,您可以拥有三个托管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的方式,它将非常整洁或非常糟糕。

相关信息: