【问题标题】:actionListener doesn't work, but the method doesactionListener 不起作用,但方法可以
【发布时间】:2012-11-30 07:56:38
【问题描述】:

我已经测试了向数据库添加值的方法,它工作正常。但是,当我尝试将该方法用作命令按钮中的 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% 确定的。

【问题讨论】:

    标签: java jsf xhtml primefaces


    【解决方案1】:

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

    你有两个选择:

    1. 请改用action

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

      import javax.faces.event.ActionEvent;
      
      // ...
      
      public void addToNetwork(ActionEvent event) {
          // ...
      }
      

    另见:

    【讨论】:

    • 谢谢,这是一个很有帮助的链接。我想我基本上知道我想做什么,但我不确定如何:我想存储“选择”事件,以便我可以将选择哪个节点的信息传输到选项对话框中 - 目前当我点击在一个节点上它应该调用 this.setSelectedNode 但我认为不是。如果我可以将它存储在客户端,或者单击哪个节点的信息,那就更方便了。
    • 我修好了!我意识到我犯的错误是假设对象应该存储变量——我怀疑这与支持 bean 的范围有关。相反,我在数据库中添加了一个字段来存储单击的节点是什么。尽管如此,如果您没有回答,无论如何都会有问题,而且我怀疑我是否会尽快弄清楚,因为我没有正确理解信息流。谢谢!
    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多