【发布时间】:2013-09-20 14:42:06
【问题描述】:
当有数据在多个页面中重复时(参考示例) 是我可以加载到单个托管 bean 并在同一页面中使用多个托管 bean。 它的影响是什么?
【问题讨论】:
-
@freak IMO 提供答案或至少提供更好的评论会更好。
标签: jsf jsf-2 managed-bean
当有数据在多个页面中重复时(参考示例) 是我可以加载到单个托管 bean 并在同一页面中使用多个托管 bean。 它的影响是什么?
【问题讨论】:
标签: jsf jsf-2 managed-bean
我可以在同一个 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 的方式,这将是非常整洁或非常糟糕的体验。
相关信息:
【讨论】: