【发布时间】:2015-06-15 08:43:20
【问题描述】:
如果我的术语不正确,我是 Java 新手,非常抱歉。
我有一个托管 bean 设置 (PolicyInformation),其中包含我在 Java 代码中实例化的会话范围:
thisPolicy = (PolicyInformation) Utils.getSessionMapValue("policyInformationBean");
if (thisPolicy == null) {
thisPolicy = new PolicyInformation();
}
上面的代码检查 bean 是否已经存在,如果存在,它使用会话映射中的对象。它似乎工作得很好。
但是,如果我在我的 XPage 上添加一个标签以使用以下代码(使用表达式语言)显示来自我的 PolicyInformation 托管 bean 的值:
<xp:label value="#{policyInformationBean.name}"/>
托管 bean 运行两次:一次是在我的 Java 类中调用它,另一次是我在上面添加标签时。
在我的 XPage 上添加标签时,有什么方法可以阻止第二次调用?我能以某种方式从 XPage 标签中的 Java 会话映射中获取值吗?
面孔配置:
<managed-bean>
<managed-bean-name>policyInformationBean</managed-bean-name>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean-class>com.package.PolicyInformation</managed-bean-class>
</managed-bean>
【问题讨论】:
-
请同时显示您的 faces-config XML 文件。使用托管 bean,您永远不必使用“新”关键字。
-
现在如果你想控制你的bean的创建,这是非常常见和有用的,那么你的bean就是一个POJO。托管 bean 一词意味着创建是为您完成的。
-
另外,查看 JSF 生命周期(方法可以被多次调用)并记住在 XPage 中很难创建单例(因为有多个类加载器)
-
我添加了我的 faces-config bean。
-
实例化后是否将手动创建的 bean 添加到会话范围?
标签: java xpages managed-bean