我是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>
答案 0 :(得分:4)
请考虑以下三点:
示例:
<managed-bean id="dBar">
<managed-bean-name>dBar</managed-bean-name>
<managed-bean-class>eu.linqed.debugtoolbar.DebugToolbar</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
删除所有创建新PolicyInformation对象的代码。要进行管理,您必须始终让框架管理器。我认为通过创建另一个对象可能会让你感到困惑。
或者,您可以将此bean设为POJO(Plain Old Java Object),而不是托管bean。这样您就可以在需要时创建对象。你不会再在faces-config中有一个条目了,你需要在创建它时使用'new'关键字。当引用变为null时,垃圾收集将清理它。
答案 1 :(得分:0)
IBM的任何人,请查看以下类:
Thread [Thread-7](Suspended(ApplicationController中第131行的断点))
ApplicationController。()行:131
J9VMInternals.newInstanceImpl(Class)行:不可用[native method]
Class.newInstance()行:1688Bean .instantiate(ClassLoader,String,BeanContext,AppletInitializer)行:189
Beans.instantiate(ClassLoader,String)行:80 ManagedBeanFactory $ 1.run()行:222
AccessController.doPrivileged(PrivilegedExceptionAction)行:413
ManagedBeanFactory .newInstance(FacesContext)行:216
ApplicationAssociate.createAndMaybeStoreManagedBeans(FacesContext,String)行:269VariableResolverImpl .resolveVariable(FacesContext,String)行:135 VariableResolverImpl.resolveVariable(FacesContext,String)行:71
在我看来,IBM无法实现同步的应用程序,视图或会话范围变量,甚至认为它们&lt; sarcasm&gt;已经有&lt; / sarcasm&gt; JAVA 1.6
http://www-01.ibm.com/support/docview.wss?uid=swg21188789 已经想知道这个链接有多长时间了......
请将种族条件视为真实情况,例如:为实现目标。