DynamicVIewPanel如果自定义则忽略oncolumnclick
使用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);
}
我还创建了一个事件变量来保存这个:
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");
}
}
我还没有试过这个,但是你可以尝试在控制树中移动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:事件处理是否仍愿意听用于点击其祖先列1。
你可以在customizerBean移动事件处理程序,就像这样:
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(...)]
Maire,谢谢,不知道UIViewColumn和UIEventHandler要导入哪些类?我得到 异常 com.ibm.xsp.component.xp.XspEventHandler与com.ibm.xsp.component.UIViewColumn 不相容 我的进口量为: 进口com.ibm.xsp.component.UIEventHandler; import com.ibm.xsp.component。UIViewColumn; 在自定义程序bean中,我已经有了一个名为public void afterCreateColumn(FacesContext上下文,int index, \t ColumnDef colDef,IControl列)的方法签名,我用它来隐藏列并将另一列设置为链接。我会同时使用afterCreateColumn吗? – Howard
Maire,谢谢,找到了com.ibm.xsp.component.xp.XspEventHandler类,并使用它和你的代码。在我的问题编辑中查看我的工作代码。霍华德 – Howard
如果XPages在您的行为怪异,那么也许您可以编写客户端onclick事件,调用JSON-RPC。然后JSON-RPC可以在后端设置scoped变量。 –
这是一种可能性,因为我可以将CSJS添加到定制程序bean的列中,但是问题是使用CSJS获取该行的值。这部分可能会很棘手...... – Howard
棘手但可能。您可以通过jQuery捕获值并将其传递给JSON-RPC。 –