【发布时间】:2017-12-18 13:44:52
【问题描述】:
我想使用一个带有两个 ManagedBeans 的 html 页面。根据 URL 中的参数,我想通过 JSTL 变量设置 bean 名称。例如:
<c:set var="bean" value="#{webModule1}" scope="request" />
或
<c:set var="bean" value="#{webModule2}" scope="request" />
我有一直在使用的课程,所以肯定可以:
@ManagedBean(name = "webModule1")
@ViewScoped
public class WebModule1 implements Serializable {
protected WebModulesFormBean form;
@PostConstruct
public void init() {
if (!firstInit()){
this.form= new WebModulesFormBean();
}
//some code
}
public void process() {
if(this.form.isActive()){
//some code
}
}
}
还有新的:
@ManagedBean(name = "webModule2")
@ViewScoped
public class WebModule2 extends WebModule1 {
public void process() {
if(this.form.isActive()){
//code with some changes
}
}
}
此解决方案适用于非空值属性和表单,例如:
<p:treeTable value="#{bean.form.root}" var="node" id="modulesTree">
但我对这段代码有疑问:
<p:poll listener="#{bean.process()}" widgetVar="documentOutcome" autoStart="#{bean.form.start}" update="modulesTree" async="false"
interval="1" id="myPoll2" />
调用监听器时,会出现 NullPointerException。 这个问题是所有 p:polls (我有几个),所以这不是方法代码的问题。 问题是 'form' 为空,尽管在开始时变量 'form' 已初始化并且 treeTable 显示在页面上。所以当监听器被调用时,'form' 开始为空。
谢谢!
【问题讨论】:
-
你能分享
bean.process()这个代码吗?这种方法可能会抛出NullPointerException -
@ArvindKatte 我更新了帖子。感谢您的评论。
-
如果可能发布异常消息,无法确定确切的根本原因
-
@ArvindKatte
NullPointerException来自this.form.isActive(),因为form变量为空。 -
将调试点放在
init方法中检查init方法中this.form的值,然后我们将研究它
标签: jsf primefaces jstl ajax-polling