前一阵子,介绍了wicket的一些官方的例子,实际开发中发现有些不太实用,例子过于简单了,考虑到目前我们团队中好多人都不熟悉这个框架(我也是刚刚接触),网上开发者寥寥无几,国内新一点的参考草料基本没有看到,为了写一个页面动不动上百行千行代码,而且极其复杂,思前考后,觉得应该是我们用错了,所以先单独对感觉几个复杂也是常用的组件下拉框、单选按钮进行单独研究,经过约两天的反复推敲,终于喜得成果,话不多说,如下:
1.测试、运行环境:idea+maven+tomcat7
2.相关版本:wicket7.6.0,jdk7
本章省去wicket安装运行环节,具体可参照本人文章:http://pandahuha.iteye.com/admin/blogs/2353293
运行环境搞定后:
首先构建登录用户,
public class User implements IClusterable {
private int id; private String loginName; private String nickname; private int logins;
set/get省略
构建页面类,命名LoginPage,
public class LoginPage extends WebPage {
private static final long serialVersionUID = -445927799394341911L;
new 两个list,下拉框、单选按钮会用到
private static final List SITES = Arrays.asList(new String[]{"T", "J", "JN"});
private static final List INTEGERS = Arrays.asList(new Integer[]{1, 2, 3});
页面类构造
public LoginPage(final PageParameters parameters) {
super(parameters);
User user = new User();
user.setNickname("J");
user.setLogins(2);
add(new LoginForm("loginForm", new CompoundPropertyModel<User>(user)));
}
user设置完相应属性后,RadioChoice、DropDownChoice会默认选中
构建内部类表单
class LoginForm extends Form<User> {
表单构造
public LoginForm(String id, IModel<User> model) {
super(id, model);
表单内部添加反馈面板
final FeedbackPanel fp = new FeedbackPanel("feedback");
fp.setOutputMarkupId(true);
add(fp);
用于反馈表单验证后的信息
添加登录框架、密码框
add(new TextField("loginName"));
add(new PasswordTextField("pwd"));
这里简单添加一下两个框框
添加下拉框
add(new DropDownChoice("nickname", SITES, new ChoiceRenderer<String>() {
@Override
public Object getDisplayValue(String value) {
switch (value) {
case "T":
return super.getDisplayValue("The Server Side");
case "J":
return "Java Lobby";
case "JN":
return "Java.Net";
default:
throw new IllegalStateException(value + " is not mapped!");
}
}
}));
重点在这里
添加单选按钮
add(new RadioChoice("logins", INTEGERS, new ChoiceRenderer<Integer>() {
@Override
public Object getDisplayValue(Integer value) {
switch (value) {
case 1:
return "One";
case 2:
return "Two";
case 3:
return "Three";
default:
throw new IllegalStateException(value + " is not mapped!");
}
}
}));
添加表单提交按钮
add(new AjaxButton("submit") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
super.onSubmit(target, form);
Object o = form.getModelObject();
if (o instanceof User) {
User user = (User) form.getModelObject();
error("it is success!" + "Logins=" + user.getLogins() + "Nickname=" + user.getNickname());
} else
error("it is error");
onError(target, form);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
super.onError(target, form);
target.add(fp);
}
});
异步提交表单时候,一定要重写onError方法
好,设置默认欢迎页面就是LoginPage,效果如下
欢迎wicket,java探讨
本文介绍了一个使用Wicket框架实现的登录页面案例,包括环境搭建、关键组件如下拉框和单选按钮的具体实现方式,以及如何通过Ajax进行异步表单提交。
351

被折叠的 条评论
为什么被折叠?



