2016-04-03 14 views
0

DynamicViewPanelとカスタムBeanを使用してリンクである列を変更します。ビューの最初の列である列は、setRendered()メソッドを使用してBean経由で非表示にされ、別の列はsetDisplayAs( "link")メソッドを使用してリンクになります。それは正常に動作しますが、oncolumnclickイベントは決して発生しません。イベントは元の列に関連付けられ、「新しい」リンク列には関連付けられていないようです。DynamicVIewPanelは、カスタマイズされている場合oncolumnclickを無視します。

とにかく「新しい」リンク列にイベントを結びつけるには?新しいXPageに移動する前にスコープ変数を設定する必要があります。

ハワード

マイアールが提案したようなものを使用すると、これが動作します。方法、公共ボイドafterCreateColumn(のFacesContextコンテキスト、INTインデックス、 ColumnDef colDef、ICONTROL列){で

は、私は隠れたカラムからイベントを取得するためにこのコードを追加:

//Hide the first column in this view 
     if(dynamicColumn.getColumnName().equalsIgnoreCase("$2")){ 
      //dynamicColumn.setRendered(false); 
      dynamicColumn.setDisplayAs("hidden"); 
      String type = dynamicColumn.getChildren().get(0).getClass().toString(); 
      DebugToolbarBean.get().info("type is " + type); 
      event = (XspEventHandler) dynamicColumn.getChildren().get(0); 
     } 

I

:私は私が追加リンクになりたかったの列を作った後

com.ibm.xsp.component.xp.XspEventHandler event; 

、:また、これを保持するために、イベント変数を作成しました3210

+1

XPageがあなたにとって奇妙な動作をしているのなら、JSON-RPCを呼び出すクライアント側のonclickイベントを書くことができます。 JSON-RPCは、バックエンドのスコープ付き変数を設定できます。 –

+0

これは、カスタマイザビーンのカラムにCSJSを追加することができるので可能ですが、問題はCSJSでそのローの値を取得することになります。その部分は難しいかもしれません... – Howard

+1

トリッキーですが可能です。 jQueryで値を取得し、JSON-RPCに渡すことができます。 –

答えて

2

これは試していませんが、コントロールツリー内のxp:eventHandlerの場所を移動してみてください。

xp:viewColumn id="column1" displayAs="link" 
    xp:eventHandler event="onclick" 
xp:viewColumn id="column2" displayAs="text" 

そして、あなたのコードは、それがdisplayAs値切り替えるように変更されています:

は同様で、最初の動的に生成されたコントロールツリーは次のようである

xp:viewColumn id="column1" displayAs="text" 
    xp:eventHandler event="onclick" 
xp:viewColumn id="column2" displayAs="link" 

が、XPを:EventHandlerはまだ聞いてしまいますその祖先列のクリック数1。

あなたはそうのように、customizerBeanになeventHandlerを移動することができ:コントロールツリー構造を作成EXTLIB内のコードは[

public void afterCreateColumns(FacesContext context, UIDynamicViewPanel panel) { 
    UIViewColumn col1 = (UIViewColumn) panel.getChildren().get(0); 
    UIViewColumn col2 = (UIViewColumn) panel.getChildren().get(1); 
    UIEventHandler eventHandler = (UIEventHandler) col1.getChildren().get(0); 
    // move the eventHandler to col2. 
    col2.getChildren().add(eventHandler); 
} 

: com.ibm.xsp.extlib.component.dynamicview.DominoDynamicColumnBuilder .createColumn(...)]

+0

Maire、ありがとう、UIViewColumnとUIEventHandlerのためにインポートするクラスは不明ですか?私は 例外 com.ibm.xsp.component.UIViewColumn と互換性がない com.ibm.xsp.component.xp.XspEventHandler 私の輸入があっ入手: 輸入com.ibm.xsp.component.UIEventHandler。 import com.ibm.xsp.component。UIViewColumn; 私はすでに列を非表示にし、他の列をリンクとして設定するために使用するpublic void afterCreateColumn(FacesContextコンテキスト、int index、 ColumnDef colDef、IControl列)というメソッドシグネチャを持っています。 afterCreateColumnの両方を使用しますか? – Howard

+0

Maire、ありがとう、com.ibm.xsp.component.xp.XspEventHandlerクラスを見つけ、それとあなたのコードを使用しました。私の質問編集で上記の私の作業コードを参照してください。ハワード – Howard

関連する問題