你进展顺利。如果让wicket将回调函数渲染到页面上会更可靠。以下两个示例展示了如何做到这一点:
A) 渲染全局回调函数。缺点是您只有一个回调端点。
(1) 创建如下行为:
public class CallFromJavascriptBehavior extends AbstractDefaultAjaxBehavior {
@Override
protected void respond(AjaxRequestTarget target) {
final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName");
System.out.println(String.format("Hello %s", parameterValue.toString()));
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forScript(String.format("nameOfFunction=%s", getCallbackFunction(CallbackParameter.explicit("yourName"))), "CallFromJavascriptBehavior"));
}}
(2) 将此行为添加到您的检票页面。
(3) 现在你可以调用 nameOfFunction('Markus');从你的 JavaScript 中。
B) 为页面上组件的每个实例调用初始化函数。
(1) 在页面中添加初始化函数
<script>
function initMyComponent(selector, callback){
$(selector).click(function(){
callback("Markus");
});
}
</script>
(2) 创建如下行为,该行为调用初始化函数并传递必要的选择器和回调函数。
public class ComponentBehavior extends AbstractDefaultAjaxBehavior{
@Override
protected void respond(AjaxRequestTarget target) {
final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName");
System.out.println(String.format("Hello %s", parameterValue.toString()));
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(OnDomReadyHeaderItem.forScript(String.format("initMyComponent('#%s', %s)", component.getMarkupId(), getCallbackFunction(CallbackParameter.explicit("yourName")))));
}}
(3) 将行为添加到您的 wicket 组件中。
如果响应方法没有被调用,这可能有不同的原因。您应该首先检查您的控制台(ide 和浏览器)。