使用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");
}
}
答案 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(...)]