如果自定义,DynamicVIewPanel会忽略oncolumnclick

时间:2016-04-03 10:24:49

标签: xpages xpages-extlib

使用DynamicViewPanel和自定义程序bean更改作为链接的列。视图中第一列的列使用setRendered()方法通过bean隐藏,另一列使用setDisplayAs(" link")方法创建链接。这很好,但oncolumnclick事件永远不会激发。事件似乎与原始列相关联,而不是" new"链接栏。

无论如何要将一个事件与" new"链接栏?我需要在导航到新的XPage之前设置一个范围变量。

霍华德

使用像Maire建议的那样使用它。

在方法中,public void afterCreateColumn(FacesContext context,int index,           ColumnDef colDef,IControl column){,我添加了这段代码来从我隐藏的列中获取事件:

//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);
        }

我还创建了一个事件变量来保存它:

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

然后,在我创建专栏的地方,我希望成为我添加的链接:

if (dynamicColumn.getColumnName().equalsIgnoreCase("OrderDate")){
          //make it a link
          dynamicColumn.setDisplayAs("link");

          DebugToolbarBean.get().info("make OrderDate a link");
          if (event != null){
              dynamicColumn.getChildren().add(event);
              DebugToolbarBean.get().info("adding event");
          } else {
              DebugToolbarBean.get().info("event is null");
          }

      }

1 个答案:

答案 0 :(得分: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,如下所示:

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);
}

[ExtLib中创建控制树结构的代码是: com.ibm.xsp.extlib.component.dynamicview.DominoDynamicColumnBuilder.createColumn(...)]