wicket DropDownChoice RadioChoice 实用
程序员文章站
2022-07-15 14:23:03
...
前一阵子,介绍了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探讨