迁移到 wicket 1.5 - jQuery、jGrowl 和 ajax 问题
Migration to wicket 1.5 - jQuery, jGrowl and ajax issues
将 wicket 从 1.4 迁移到 wicket 1.5 后,我遇到了非常奇怪的问题 - 我的 ajax "fields" 不工作并且我的 [= 有错误(通过 firebug 找到) 40=] 和 jGrowl 库。
阅读 migration guide 后,我更改了我的 *.java 文件,其中包含 JS 库(我包含 "main" class 之一):
@Override
public void renderHead(IHeaderResponse response) {
// JQUERY
//val header = JSLib.getHeaderContribution(VersionDescriptor.alwaysLatest(Library.JQUERY));
//header.renderHead(response);
//val header1 = JSLib.getHeaderContribution(VersionDescriptor.alwaysLatest(Library.JQUERY_UI));
//header1.renderHead(response);
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-1.4.2.min.js"));
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-ui-1.8.4.custom.min.js"));
// MSDROPDOWN
response.renderJavaScriptReference(new CommonResourceRef("js/jquery.msdropdown.js"));
response.renderJavaScriptReference(new CommonResourceRef("js/languageDropDown.js"));
response.renderCSSReference(new CommonResourceRef("css/msdropdown.css"));
// JGROWL
response.renderJavaScriptReference(new CommonResourceRef("js/jquery.jgrowl_minimized.js"));
response.renderCSSReference(new CommonResourceRef("css/jquery.jgrowl.css"));
response.renderCSSReference(new CommonResourceRef("css/jgrowl-page.css"));
response.renderOnLoadJavaScript("$(document).bind('keydown', function(e) { return submitButtonOnEnter(e); });");
// disables warning on page leaving with displayed modal (if unloadConfirmation == false)
if (!unloadConfirmation)
response.renderOnLoadJavaScript("Wicket.Window.unloadConfirmation = false;");
}
在我的一个页面上,我确实包含了这些库(再次使用 firebug 检查),但我确实遇到了这个错误:
TypeError: $.jGrowl is not a function
Wicket.Event.add(window, "domready", function(event) {
$.jGrowl('close');;});
TypeError: $(...) is null
$("#middlebar > .menu > li > a").click(function() {
TypeError: $(...).bind is not a function
...t.add(window, "load", function(event) { $(document).bind('keydown',
function(e) ...
至于我的 ajax 字段,它们不起作用(当我提交字段时,没有任何反应)。我注意到这个项目正在使用 AjaxRequestTarget(我是不是把它迁移错了?)。不幸的是,我对 ajax 如何与检票口一起工作知之甚少,我只能找到这个,我相信它正在创建 ajax "question"。
public class PageAjaxEventBehavior extends AjaxEventBehavior {
[...]
public void renderHead(IHeaderResponse response) {
CharSequence handler = Strings.replaceAll(Strings.escapeMarkup(getEventHandler().toString()), "'", "'");
String jqueryCall = String.format("$.ajax({ url: '%s', success: function(data) { $('.result').html(data); alert('Load was performed.'); } });",
getCallbackUrl());
String eventHandler = String.format("$(window).bind(\"%s\", function() {%s;});", getEvent(), jqueryCall);
if (!closed)
JavaScriptUtils.writeJavaScript(RequestCycle.get().getResponse(), eventHandler);
closed = true;
}
[...]
}
我不知道我还应该包括什么,所以如果您认为这个问题遗漏了什么,请告诉我。请注意,在 wicket 1.4 中,everythink 工作正常。
我还注意到 Wicket.Event.add(window, "domready", function(event) { $.jGrowl('close');;});
在包含 jGrowl 库之前在我的页面上呈现,在 1.4 中呈现之后。
尝试在方法的第一行添加 super.renderHead(response)
。
将 wicket 从 1.4 迁移到 wicket 1.5 后,我遇到了非常奇怪的问题 - 我的 ajax "fields" 不工作并且我的 [= 有错误(通过 firebug 找到) 40=] 和 jGrowl 库。
阅读 migration guide 后,我更改了我的 *.java 文件,其中包含 JS 库(我包含 "main" class 之一):
@Override
public void renderHead(IHeaderResponse response) {
// JQUERY
//val header = JSLib.getHeaderContribution(VersionDescriptor.alwaysLatest(Library.JQUERY));
//header.renderHead(response);
//val header1 = JSLib.getHeaderContribution(VersionDescriptor.alwaysLatest(Library.JQUERY_UI));
//header1.renderHead(response);
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-1.4.2.min.js"));
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-ui-1.8.4.custom.min.js"));
// MSDROPDOWN
response.renderJavaScriptReference(new CommonResourceRef("js/jquery.msdropdown.js"));
response.renderJavaScriptReference(new CommonResourceRef("js/languageDropDown.js"));
response.renderCSSReference(new CommonResourceRef("css/msdropdown.css"));
// JGROWL
response.renderJavaScriptReference(new CommonResourceRef("js/jquery.jgrowl_minimized.js"));
response.renderCSSReference(new CommonResourceRef("css/jquery.jgrowl.css"));
response.renderCSSReference(new CommonResourceRef("css/jgrowl-page.css"));
response.renderOnLoadJavaScript("$(document).bind('keydown', function(e) { return submitButtonOnEnter(e); });");
// disables warning on page leaving with displayed modal (if unloadConfirmation == false)
if (!unloadConfirmation)
response.renderOnLoadJavaScript("Wicket.Window.unloadConfirmation = false;");
}
在我的一个页面上,我确实包含了这些库(再次使用 firebug 检查),但我确实遇到了这个错误:
TypeError: $.jGrowl is not a function
Wicket.Event.add(window, "domready", function(event) { $.jGrowl('close');;});TypeError: $(...) is null
$("#middlebar > .menu > li > a").click(function() {TypeError: $(...).bind is not a function ...t.add(window, "load", function(event) { $(document).bind('keydown', function(e) ...
至于我的 ajax 字段,它们不起作用(当我提交字段时,没有任何反应)。我注意到这个项目正在使用 AjaxRequestTarget(我是不是把它迁移错了?)。不幸的是,我对 ajax 如何与检票口一起工作知之甚少,我只能找到这个,我相信它正在创建 ajax "question"。
public class PageAjaxEventBehavior extends AjaxEventBehavior {
[...]
public void renderHead(IHeaderResponse response) {
CharSequence handler = Strings.replaceAll(Strings.escapeMarkup(getEventHandler().toString()), "'", "'");
String jqueryCall = String.format("$.ajax({ url: '%s', success: function(data) { $('.result').html(data); alert('Load was performed.'); } });",
getCallbackUrl());
String eventHandler = String.format("$(window).bind(\"%s\", function() {%s;});", getEvent(), jqueryCall);
if (!closed)
JavaScriptUtils.writeJavaScript(RequestCycle.get().getResponse(), eventHandler);
closed = true;
}
[...]
}
我不知道我还应该包括什么,所以如果您认为这个问题遗漏了什么,请告诉我。请注意,在 wicket 1.4 中,everythink 工作正常。
我还注意到 Wicket.Event.add(window, "domready", function(event) { $.jGrowl('close');;});
在包含 jGrowl 库之前在我的页面上呈现,在 1.4 中呈现之后。
尝试在方法的第一行添加 super.renderHead(response)
。