gpt4 book ai didi

java - Wicket 6.13 链接 onclick 行为不适用于 ajax onclick 行选择

转载 作者:行者123 更新时间:2023-12-02 05:04:36 24 4
gpt4 key购买 nike

我最近从 Wicket 1.5.11 升级到 Wicket 6.13升级后,我遇到了链接 onclick 行为的问题。

我们有一个可点击的行,其中包含几列(其中一列是指向新页面的链接)。现在,如果我们单击链接,则会进入新页面,然后单击行(除了链接之外),该行将被选中(使用 Ajax 调用)。

这在 Wicket 1.5.11 上运行良好,但我在 Wicket 6.13 上遇到问题

链接类:

public class MyLink extends Link {

private static final long serialVersionUID = 5808539933400105591L;
private MyRow myRow;

public MyLink(String id, MyRow myRow) {
super(id);
this.myRow = myRow;
}

/** {@inheritDoc} */
@Override
public void onClick() {
//sets the response page where this needs to be redirected.
this.setResponsePage(new ResponseReadPage(this.myRow));
}
}

填充方法:

@Override
protected void populateItem(final ListItem item) {
final MyRow myRow = (MyRow) item.getModelObject();
item.add(new Label("naam", myRow.getName()));
item.add(new Label("id", myRow.getCode()));

MyLink myLink = new MyLink("myLink", myRow);
item.add(myLink);
final MyRow selectedRow = this.session.getSelectedRow();

if (selectedRow != null
&& selectedRow.equals(myRow)) {
this.session.selectedRow(myRow);
item.add(new AttributeModifier("class", "activeRow"));
this.selecteditem = item;

//some business logic
}

item.add(new AjaxEventBehavior("onclick") {
/** {@inheritDoc} */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void onEvent(final AjaxRequestTarget target) {
final WebMarkupContainer container = (WebMarkupContainer) MyListView.this.getParent()
.getParent().get("myContainer");

MyListView.this.session.setSelectedRow(myRow);

if (MyListView.this.currentActiveItem != null) {
MyListView.this.previousActiveItem = MyListView.this.currentActiveItem;
MyListView.this.previousActiveItem.add(new AttributeModifier("class", ""));
}
item.add(new AttributeModifier("class", "activeRow"));
MyListView.this.currentActiveItem = item;
if (MyListView.this.previousActiveItem != null) {
target.add(MyListView.this.previousActiveItem);
}

if (MyListView.this.selecteditem != null
&& !MyView.this.selecteditem.equals(item)) {
MyListView.this.selecteditem.add(new AttributeModifier("class", ""));
target.add(MyListView.this.selecteditem);
}
target.add(item);
target.add(container);
}
});
}

当我尝试单击链接而不是链接的 onClick 方法时,行的 AjaxBehavior 的 onclick 事件被调用。谁能指出我正确的方向来解决这个问题?

更新:当我右键单击链接并在另一个选项卡中打开它时,对链接的 onClick 方法的调用按预期成功发生。

最佳答案

我找到了这个问题的解决方案。在代码中添加了以下几行:

myLink.add(new AttributeAppender(
"onclick", new Model("if(event.stopPropagation) { "+
"event.stopPropagation();"+
"} else { "+"event.cancelBubble = true;"
+"}"), ";"));

链接 onclick 事件被传播到该行的 onclick 事件,因此它的行为方式如下。

关于java - Wicket 6.13 链接 onclick 行为不适用于 ajax onclick 行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com