我想在wicket 6.5中测试一些AJAX DropDown(尝试过wicket 6.6,有相同的问题)。
我使用quickstart wicket page创建了我的wicket测试项目-http://wicket.apache.org/start/quickstart.html
mvn原型:generate-DarchetypeGroupId=org。阿帕奇。wicket-DarchetypeArtifactId=wicket原型quickstart-DarchetypeVersion=6.6.0-DgroupId=net。betlista-DartifactId=测试。wicket-6.6-DarchetypeRepository=https://repository.apache.org/-DinteractiveMode=false
我在生成的WicketApplication
类的getHomePage()
中将HomaPage
更改为我的LoadableDropDownTestPage
。
LoadableDropDownTestPage的Java代码是:
package net.betlista;
import java.io.Serializable;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.IAjaxIndicatorAware;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
public class LoadableDropDownTestPage extends WebPage implements IAjaxIndicatorAware {
public LoadableDropDownTestPage() {
addComponents();
}
private void addComponents() {
add(new FeedbackPanel("feedback"));
FormObject formObject = new FormObject();
Form<FormObject> form = new Form<FormObject>("loadableDropDownTestForm", Model.of(formObject));
form.setOutputMarkupId(true);
form.setOutputMarkupPlaceholderTag(true);
final DropDownChoice<String> countryDD = new LoadableDropDown("countryDD", new PropertyModel<String>(formObject, "country"));
countryDD.setChoices(new CountryLoadableModel());
countryDD.setOutputMarkupId(true);
countryDD.setRequired(true);
countryDD.setOutputMarkupPlaceholderTag(true);
final DropDownChoice<String> cityDD = new LoadableDropDown("cityDD", new PropertyModel<String>(formObject, "city"));
cityDD.setChoices(new CityLoadableModel());
cityDD.setOutputMarkupId(true);
cityDD.setRequired(true);
cityDD.setOutputMarkupPlaceholderTag(true);
countryDD.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("country DD changed");
target.add(cityDD);
}
});
form.add(countryDD);
form.add(cityDD);
form.add(new AjaxButton("ab") {} );
add(form);
}
static class LoadableDropDown extends DropDownChoice<String> {
public LoadableDropDown(String id, IModel<String> model) {
super(id);
setModel(model);
}
}
static class FormObject implements Serializable {
String country;
String city;
}
class CountryLoadableModel extends LoadableDetachableModel<List<String>> {
@Override
protected List<String> load() {
System.out.println("loading CountryLoadableModel");
List<String> result = Arrays.asList(new String[] { "CR", "SR" } );
return result;
}
}
class CityLoadableModel extends LoadableDetachableModel<List<String>> {
List<String> choices = new LinkedList<String>();
@Override
protected List<String> load() {
System.out.println("loading CityLoadableModel");
if (choices.isEmpty()) {
choices.add("1");
} else {
int size = choices.size();
choices.add(Integer.toString(size+1));
}
return choices;
}
}
@Override
public String getAjaxIndicatorMarkupId() {
return "ajaxIndicator";
}
}
页面的HTML是:
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<div wicket:id="feedback"></div>
<form wicket:id="loadableDropDownTestForm">
Countries: <select wicket:id="countryDD"></select><br>
Cities: <select wicket:id="cityDD"></select><br>
<!-- input type="submit"-->
<button wicket:id="ab"></button>
</form>
</html>
我的第一个问题是,我在页面上看不到AJAX调试链接。但我认为,虽然有OnChangeAjaxBehavior
,但我应该看到它。
下一个问题是,当我改变国家的价值下降时,什么都没有发生,我不知道我做错了什么。
在我的代码中,您可以看到,我也尝试过AjaxButton,但它也不起作用。
编辑:
日志的一部分(它在开发模式下运行)
********************************************************************
*** WARNING: Wicket is running in DEVELOPMENT mode. ***
*** ^^^^^^^^^^^ ***
*** Do NOT deploy to your live server(s) without changing this. ***
*** See Application#getConfigurationType() for more information. ***
********************************************************************
尝试改用ajaxFormComponentUpdateBehavior
。下面是我的代码中的一个部分-
DropDownChoice<String> actionSelect = new DropDownChoice<String>("myDropdown", updateActions, choiceRenderer);
actionSelect.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
...
}
});
我认为问题在于你没有使用
这里有一个很好的例子,说明了你在Wicket Examples上所做的事情,请看一看:http://www.wicket-library.com/wicket-examples/ajax/choice
问题内容: 当我想在页面中重定向到其他页面时,我使用以下方法异常: 问题是此信息在浏览器中可见。如何发送此邮件并使用POST方法? 问题答案: 在大多数浏览器中,POST重定向在某种程度上都是深奥的。Wicket的RedirectRequestHandler当前仅支持HTTP代码301和302。POST重定向将需要307,这还将向用户显示警告。 也就是说,您试图做的事情本质上是不安全的。难道 不是
我是检票口开发的初学者。我有一个关于弹出对话框的问题。当我点击按钮时会触发此对话框。 此对话框包含一个复选框(Accept terms)和下面的几个单选按钮,以及两个按钮,一个是cancel,另一个是Accept。 我的问题是,我需要确保,我选择了复选框和一个无线电来设置按钮“Accept”以启用状态,否则它应该被密封(enabled=false)。 问题是单选按钮位于不同的文件中(它们位于其他文
用nodewebkit封装的一个伪客户端版定火车票工具
所以我运行一个脚本,调用: 它在ubuntu上运行时似乎运行良好,但当我使用Git Bash在Windows上运行时,我得到了这个错误: 它似乎试图在我的机器上运行脚本,而不是我试图调用它的实际容器。 你知道为什么会这样吗?
我有一个更新存储过程,它可以完美地在我的sql上工作,但当我尝试在我的c#表单上更新时,它不会更新,但我的代码似乎是正确的,我不确定为什么我不能执行更新这是我的更新存储过程sql脚本使用[MediaPlayer]GO/*对象:StoredProcedure[dbo]。[updateBooks]脚本日期:2013年11月25日07:51:33*/SET ANSI_NULLS ON GO SET QU
一个简单的 漫展 检票软件,只需要在票上面做一定顺序的条码即可,配合条码枪使用。内置音效可更换。