3

データベースに値を追加する方法をテストしましたが、正常に機能します。ただし、コマンドボタンで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に設定してから、remoCommandでifループを使用してメソッドを呼び出し、そのプロパティがtrueに設定されている場合に接続してみました。それはうまくいきませんでした。

問題は、どのノードがselectedNodeであるかをオブジェクトに保持することであると思われますが、よくわかりません。どんな助けでも素晴らしいでしょう!

編集:答えは、ノードラベルをデータベースに保存し、そこから再度アクセスすることでした。非常に単純です、本当に。selectedNodeの値が設定されてから呼び出されるまでの間にオブジェクトが破棄されていたと思いますが、100%確信はありません。

4

1 に答える 1

3

actionメソッドとは異なり、メソッドは引数actionListenerを取る必要があります。ActionEvent

次の 2 つのオプションがあります。

  1. action代わりに使用してください。

    <p:commandButton ... action="#{mmBean.addToNetwork}" />
    
  2. 使用しない場合でも、その引数を追加します。

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

以下も参照してください。

于 2012-12-12T15:33:01.410 に答える