gpt4 book ai didi

java - Apache wicket 按钮 setMarkupId 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:11 26 4
gpt4 key购买 nike

我有:

  • ListView
  • 按钮
  • WebMarkupContainer(弹出内容容器)

因此,当我填充 ListView 时,我向按钮添加 AjaxEventBehavior 。我还重写了 getAjaxCallDecorator(),因为我需要从每个按钮调用 javascript 函数。因此,在 decorateScript 函数中,我使用 setMarkupId() 覆盖 WebMarkupContainer 标记 id,它起作用了。我对 Button 执行了相同的操作,并且它有效,至少在我调用 getMarkupId() 时是这样。但是当我查看生成的 HTML 时,它不在那里!为什么会发生这种情况?

代码如下(位于 ListViewpopulateItem 内部):

infoBtn.add(new AjaxEventBehavior("onclick") {

@Override
protected void onEvent(AjaxRequestTarget target) {
}

@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {

return new IAjaxCallDecorator() {

@Override
public CharSequence decorateScript(Component component, CharSequence script) {
StringBuilder jsScript = new StringBuilder();

infoPopoverContent.setMarkupId(infoPopoverContent.getMarkupId(true) + String.valueOf(pos));
infoBtn.setOutputMarkupPlaceholderTag(true);
infoBtn.setMarkupId(infoBtn.getMarkupId() + String.valueOf(pos));

jsScript.append("$('#" + infoBtn.getMarkupId() + "').popover({");
jsScript.append("html:true,");
jsScript.append("placement:'bottom',");
jsScript.append("content:function() {");
jsScript.append("return $('#");
jsScript.append(infoPopoverContent.getMarkupId());
jsScript.append("').html();");
jsScript.append("}");
jsScript.append("});");

logger.debug(jsScript.toString());

pos++;

return jsScript;
}

@Override
public CharSequence decorateOnSuccessScript(Component component,
CharSequence script) {
// TODO Auto-generated method stub
return null;
}

@Override
public CharSequence decorateOnFailureScript(Component component,
CharSequence script) {
// TODO Auto-generated method stub
return null;
}
};
}
});

最佳答案

确保您调用的是 infoBtn.setOutputMarkupId(true) ,以便 Wicket 知道它应该输出 id属性。

通知 setOutputMarkupPlaceholderTag(true) 也在调用setOutputMarkupId(true)在幕后。如果不太了解您的代码,看起来您并不真正需要它。 setOutputMarkupPlaceholderTag()将输出一个空容器(<span id="xxx">,以防组件不可见,只是为了引用组件所属的位置,并允许 Wicket 在 AJAX 响应中通过 DOM 进行操作(例如,使组件再次可见)。

作为旁注,如果您确实不需要 id属性具有特定值,您可以通过不使用 setMarkupId() 来简化代码并让 Wicket 生成 id适合你。

此外,删除 IAjaxCallDecorator 可能会更简单。并将脚本附加到 onEvent 中通过 AjaxRequestTarget#appendJavascript() AjaxRequestTarget #prependJavascript() ,取决于您的需求。

关于java - Apache wicket 按钮 setMarkupId 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959023/

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