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

6 jsf jsf-2 managed-bean

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

Lui*_*oza 17

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

是的,你可以,我强烈建议你试试:).

它的影响是什么?

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

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

  • 一个@SessionScopedBean,它会显示登录的用户信息.如果是亚马逊视图,它只显示名字.
  • @ApplicationScoped豆将为各国提供的数据.这个信息不会经常变化(至少每天都有一个新的国家出生= \).
  • @ViewScoped豆将处理请求数据,出错信息和注册.

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>
Run Code Online (Sandbox Code Playgroud)

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

相关信息: