为什么当bean范围被请求时,在表面中的树ajax事件不起作用?

时间:2014-08-21 09:10:12

标签: jsf-2 primefaces

我的xhtml代码是:

<p:tree id="attachTree" style="width: 100%;" value="#{detailsTaskBacking.attachRootNode}" selectionMode="single" selection="#{detailsTaskBacking.selectedNode}" var="node">
<p:ajax event="select" async="false" update=":roteiroAttachTab:formAttachForm:mediaPdf" listener="#{detailsTaskBacking.onNodeSelect}"/>
<p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{text['tasksbacking.tabAttach']}"/>
 </p:treeNode>
<p:treeNode type="file" expandedIcon="ui-icon-document" collapsedIcon="ui-icon-document">
 <h:outputText value="#{node.name}"/>
</p:treeNode>
</p:tree>

我的bean代码是:

@request
...
public void onNodeSelect(NodeSelectEvent event) {...}

在调试模式下运行项目时,参数事件的selectedNode为null,为什么?

为什么在primefaces树中ajax事件在请求bean范围时不起作用?我在视图范围内使用一个bean测试了这个,并且selectedNode不为null,为什么?

1 个答案:

答案 0 :(得分:2)

如果#{detailsTaskBacking.attachRootNode}后面的模型在回发期间不兼容地更改,则会发生这种情况。例如。当它重新初始化为null时。您需要确保在同一视图上的回发之间模型完全相同。对于请求范围的bean,您需要确保在@PostConstruct中准备与显示表单时完全相同的模型。另一种方法是只生成bean @ViewScoped,这样只要在同一视图上回发,同一个bean实例就会存在。

另见: