我已经测试了向数据库添加值的方法,它工作正常。但是,当我尝试将该方法用作命令按钮中的 actionListener 时,它不起作用。谁能解释一下我错了什么?这是方法:
public void addToNetwork() {
MindmapNode currentNode = this.selectedNode;
this.user.setConnections( this.user.getConnections() + "-" + currentNode.getLabel() );
this.userConn = Arrays.asList(this.user.getConnections().split("-"));
this.setUserdetails( this.user );
}
这是xhtml:
<p:mindmap value="#{mmBean.root}" style="width:100%;height:600px" id="mindmap">
<p:ajax event="select" listener="#{mmBean.onNodeSelect}" immediate="true"
id="oneClick" oncomplete="options.show()" />
/p:mindmap>
<p:dialog widgetVar="options">
<p:panelGrid id="optionspanel" columns="2">
<h:outputText value="Add this user to your network?"/>
<p:commandButton value="Add" update="mindmap" actionListener="#{mmBean.addToNetwork}" onclick="options.hide()" id="btnAdd"/>
</p:panelGrid>
</p:dialog>
这是 onNodeSelect 的方法:
public void onNodeSelect(SelectEvent event) {
MindmapNode node = (MindmapNode) event.getObject();
this.setSelectedNode(node);
}
请注意,当他们单击时,我很容易强制添加,但最终我还想为用户提供许多其他选项。
这可以通过例如在他们单击添加时将 addToNetwork 中的属性设置为 true 来完成吗?基本上我在想像remoteCommand这样的东西?我尝试让第一个命令将连接属性设置为 true,然后 remoCommand 使用 if 循环调用该方法以在该属性设置为 true 时进行连接。那没有用。
我怀疑问题在于在对象中维护哪个节点是 selectedNode,但我不确定。任何帮助都会很棒!
编辑:答案是将节点标签存储在数据库中,然后从那里再次访问它。很简单,真的。我认为该对象在设置和调用 selectedNode 值之间的某个时间被销毁,但我对此不是 100% 确定的。