actionListener不起作用,但该方法可以

时间:2012-12-12 15:12:16

标签: java jsf xhtml primefaces

我已经测试了我的方法来为数据库添加一个值,它运行正常。但是,当我尝试在命令按钮中将该方法用作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这样的东西?我尝试让第一个命令将connect-property设置为true,然后如果该属性设置为true,则remoCommand调用带有if循环的方法进行连接。那没用。

我怀疑问题是在对象中维护哪个节点是selectedNode,但我不确定。任何帮助都会很棒!

编辑:答案是将nodelabel存储在数据库中,然后从那里再次访问它。很简单,真的。我认为对象在被设置和被调用的selectedNode值之间的某个时间被破坏了,但我并不是100%肯定。

1 个答案:

答案 0 :(得分:3)

action方法相反,actionListener方法必须采用ActionEvent参数。

您有两个选择:

  1. 请改用action

    <p:commandButton ... action="#{mmBean.addToNetwork}" />
    
  2. 添加该参数,即使您从未使用它。

    import javax.faces.event.ActionEvent;
    
    // ...
    
    public void addToNetwork(ActionEvent event) {
        // ...
    }
    
  3. 另见: