jQuery回调的Wicket AjaxRequestTarget不包含组件

jQuery回调的Wicket AjaxRequestTarget不包含组件,jquery,wicket,behavior,jquery-callback,Jquery,Wicket,Behavior,Jquery Callback,我试图实现一个jqueryajax回调来接收第三方JavaScript库的事件 而且它几乎起作用了!:) jQuery AJAX post是服务器端的接收器。回调URL由添加到面板的AbstractDefaultAjaxBehavior生成。在行为的respond方法中,我向AjaxRequestTarget添加了面板的子组件。但这不会重新绘制组件。未引发异常,已设置标记ID的输出 有什么想法吗?知道我在哪里可以找到wicket组件在GitHub中做类似的事情吗?等等。我的解决方案基于上面的评论

我试图实现一个jqueryajax回调来接收第三方JavaScript库的事件

而且它几乎起作用了!:)

jQuery AJAX post是服务器端的接收器。回调URL由添加到面板的AbstractDefaultAjaxBehavior生成。在行为的respond方法中,我向AjaxRequestTarget添加了面板的子组件。但这不会重新绘制组件。未引发异常,已设置标记ID的输出


有什么想法吗?知道我在哪里可以找到wicket组件在GitHub中做类似的事情吗?等等。

我的解决方案基于上面的评论。要通过AjaxCallback更新的简单标签:

public class HomePage extends WebPage { private static final long serialVersionUID = 1L; private String value = "Hello World"; public HomePage(final PageParameters parameters) { super(parameters); final Label label = new Label("label", new PropertyModel(HomePage.this, "value")); label.setOutputMarkupId(true); add(label); label.add(new DemoCallback(){ @Override protected void onCallback(String fromClient, AjaxRequestTarget target) { value = fromClient; target.add(label); } }); } } 公共课主页扩展网页{ 私有静态最终长serialVersionUID=1L; 私有字符串value=“Hello World”; 公共主页(最终页面参数){ 超级(参数); 最终标签=新标签(“标签”,新属性模型(HomePage.this,“值”); label.setOutputMarkupId(true); 添加(标签); label.add(新的DemoCallback(){ @凌驾 受保护的void onCallback(来自客户端的字符串,AjaxRequestTarget){ 价值=来自客户; 添加(标签); } }); } } 呈现回调的行为:

public class DemoCallback extends AbstractDefaultAjaxBehavior { @Override public void renderHead(Component component, IHeaderResponse response) { super.renderHead(component, response); StringBuffer script = new StringBuffer(); script.append("alert('Callback will follow!');\n"); script.append("var dataForServer='From client with love.';\n"); script.append(getCallbackFunctionBody(CallbackParameter .explicit("dataForServer"))); response.render(OnEventHeaderItem.forScript( "'" + component.getMarkupId() + "'", "click", script.toString())); } @Override protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { super.updateAjaxAttributes(attributes); attributes.setMethod(Method.POST); } @Override protected void respond(AjaxRequestTarget target) { StringValue parameterValue = RequestCycle.get().getRequest() .getPostParameters().getParameterValue("dataForServer"); onCallback(parameterValue.toString(), target); } protected void onCallback(String fromClient, AjaxRequestTarget target) { // overide to handle callback } } 公共类DemoCallback扩展了AbstractDefaultAjaxBehavior{ @凌驾 public void renderHead(组件组件,IHeaderResponse响应){ super.renderHead(组件、响应); StringBuffer脚本=新建StringBuffer(); script.append(“警报('Callback will follow!');\n”); script.append(“var dataForServer='From client with love.';\n”); append(getCallbackFunctionBody)(CallbackParameter .explicit(“dataForServer”); response.render(oneventheaderiem.forScript( “'”+component.getMarkupId()+“'”,“单击”,script.toString()); } @凌驾 受保护的void updateAjaxAttributes(AjaxRequestAttributes){ super.updateAjaxAttributes(attributes); attributes.setMethod(Method.POST); } @凌驾 受保护的无效响应(AjaxRequestTarget目标){ StringValue参数value=RequestCycle.get().getRequest() .getPostParameters().getParameterValue(“dataForServer”); onCallback(parameterValue.toString(),target); } 受保护的void onCallback(来自客户端的字符串,AjaxRequestTarget){ //覆盖以处理回调 } } 在头部部分呈现什么样的边门:

Wicket.Event.add('label1', "click", function(event) { alert('Callback will follow!'); var dataForServer='From client with love.'; var attrs = {"u":"./?0-2.IBehaviorListener.0-label","c":"label1","m":"POST"}; var params = {'dataForServer': dataForServer}; attrs.ep = params; Wicket.Ajax.ajax(attrs); ;}); add('label1',“click”,函数(事件){ 警报('随后将进行回调!'); var dataForServer='From client with love'; var attrs={“u”:“/?0-2.IBehaviorListener.0-label”,“c”:“label1”,“m”:“POST”}; var params={'dataForServer':dataForServer}; attrs.ep=参数; Ajax.Ajax(attrs); ;});
ajaxtabedpanel
是wicket扩展的一个示例。如果没有,请发布处理程序代码和相关的组件层次结构创建。您使用的是$.post(…)还是Wicket.Ajax.post(…)?Wickets post方法有一个成功的处理程序,它可以重新绘制组件(据我记忆所及)。您需要使用AbstractDefaultAjaxBehavior#GetCallbackFunction谢谢大家!我做了一个快速启动,以验证您的提示,它的工作。问题是,我做了$post(…)。我对Wicket.Ajax.post(…)的参数感到困惑,但是getCallbackFunctionBody(…)做得非常出色!