http://blog.csdn.net/jiangfeng861016/article/details/5629410

总述:
Wicket开发和.Net很相似,在html页面中对控件做wicket的声明,然后在java代码中便可以生成一控件。控件的值或内容都以Model存放,所以当修改其值或内容时都是在修改Model中的对象,取值时只需要取到Model中对象再加以变形就是我们想要的值了。Model中可以存放任何类型,因为它存的是object类型。

文本控件(Label)
生成:
有两种方法,第一种不使用Model,直接显示内容:
html:
<span wicket:id="lbName"></span>
java:
 Label lbName = new Label("lbName","wyk");
this.add(lbName);
此时只能显示wyk,且不可修改;
第二种方法,使用Model存放内容:
java:
private Model nameModel = new Model();

nameModel.setObject("12345");
Label lb = new Label("lbName",nameModel);
this.add(lb);
这种方法可以让Label显示任何我们想要的内容,当然在程序运行当中改变显示内容时只需要改变Model即可。

设置常值:
如方法一生成,设置一个字符串常量即可。

设置变量值:
如方法二生成,从数据库或其它数据集中得到变量再将设置Model即可。

取值:
只需要对Model取值即可:
nameModel.getObject().toString()
不使用Model时不能取得文本内容!

--------------------------------------------------------------------------------------------

多行文本控件(MultiLineLabel)
在Label中设置了换行符<br/>,在客户端仍然原样输出,即:123<br/>45m,使用/n则html端不显示,所以想要输出多行文本就要使用MultiLineLabel。
java:
nameModel.setObject("123/n45");
this.add(new MultiLineLabel("lbTest",nameModel));

取值和Label相同。

--------------------------------------------------------------------------------------------

表单控件(Form)
表单控件中最重要的莫过于submit的事件处理。
html:
 <form wicket:id="form">
            <span wicket:id="lbName"></span><p/>
            <input type="submit" value="提交"/>
        </form>
java:

Form form = new Form("form") {

@Override
            protected void onSubmit() {
                String str = txtNameModel.getObject().toString();
                lbNameModel.setObject(upperAction.execute(str));
            }
        };
        this.add(form);
        form.add(new Label("lbName", lbNameModel));

在Form声明的时候重写onSubmit方法。
注:根据html页面中标志的层次,form 内的控件在java代码中一定要添加至form中,即form.add。

-------------------------------------------------------------

下拉框(DropDownChoices),单选按钮组(RadioChoice)
这两个控件使用方法相同,都只能从一组中选择一项。
html:
<span wicket:id="raVisible"></span>
java:
//使用List设置控件的text
List lsVisible = Arrays.asList(new String[]{"显示", "不显示"});
raVisible = new RadioChoice("raVisible", visibleModel, lsVisible).setSuffix(" ");        //设置后缀为空字串可以横向显示
form.add(raVisible);
//设置value
raVisible.setModelValue(new String[]{"1", "0"});
//初始值
使用 visibleModel.setObject();可设置初始值。
如:visibleModel.setObject("显示");
//赋值
前面已经初始化好了控件,所以赋值时只需要将Model的值设置一下即可
//取值
取得Model的值即可,使用:
value = visibleModel.getObject().toString().equals("显示") ? 1 : 0;

从数据库中取出一组不确定的值可如下设置:
  private List lsSystemObject = new ArrayList();
    private Map mapSystemObject = new HashMap();
    private IChoiceRenderer renderer = new ChoiceRenderer() {
        @Override
        public Object getDisplayValue(Object object) {
            return mapSystemObject.get(object);
        }
    };
  List listAllSystemObject = getAllSystemObject();
        for (int i = 0; i < listAllSystemObject.size(); i++) {
            SystemObject sysObject = (SystemObject) listAllSystemObject.get(i);
            lsSystemObject.add(sysObject.getSystemID().toString());
            mapSystemObject.put(sysObject.getSystemID().toString(), sysObject.getSystemName());
        }
        ddcSystemObject = new DropDownChoice("ddcSystemObject", systemIDModel, lsSystemObject, renderer);
        form.add(ddcSystemObject);

设置初始值:
systemIDModel.setObject("100");

设置选中值:
从数据库中取得的值,让其在控件中表现为选中,
systemIDModel.setObject(menu.getSystemID().toString());
注:Model中的值的类型要和List中保持一致。

取值:
依然是从Model中取值,
Integer logTypeID = Integer.valueOf(logTypeIDModel.getObject().toString());

注:DropDownChoice控件则需要在html端声明为select,不能使用span.
--------------------------------------------------

复选框组(CheckBoxMultipleChoice)
用list来装所有取出的数据,然后设置一下Model的值即可。下面的例子是一个测试项目,用于设置菜单和动作的关联:
html:

java:
private CheckBoxMultipleChoice cbcmOperateCode;
private Model operateCodeModel = new Model();
    private List lsCode = new ArrayList();
    private Map mapCode = new HashMap();
    private Integer menuID;
    IChoiceRenderer renderer = new ChoiceRenderer() {
        @Override
        public Object getDisplayValue(Object object) {
            return mapCode.get(object);
        }
    };
operateCodeModel.setObject((Serializable) getMenuOpreateCodeByMenuID(getMenuID()));

cbcmOperateCode = new CheckBoxMultipleChoice("cbcmOperateCode", operateCodeModel, lsCode, renderer);
        add(cbcmOperateCode);

//取到数据置入list中
 private List getMenuOpreateCodeByMenuID(int menuID) {
        SysRefOperateMenuDAO refDao = new SysRefOperateMenuDAO();
        List lsOMenu = new ArrayList();
        try {
            List list = refDao.getAllSysRefOperateMenu(menuID);
            for (int i = 0; i < list.size(); i++) {
                SysRefOperateMenu omenu = (SysRefOperateMenu) list.get(i);
                lsOMenu.add(omenu.getOperateCode());
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return lsOMenu;
    }

设置值 :
将值放入到List中,然后执行序列化操作。
operateCodeModel.setObject((Serializable) getMenuOpreateCodeByMenuID(getMenuID()));

取值:
List lsOperateCode = (List) operateCodeModel.getObject();
                for (int i = 0; i < lsOperateCode.size(); i++) {
                    lsOperateCode.get(i).toString();
                }

--------------------------------------------------

密码控件(Password)
此控件的生成和取值都比较简单,只是在赋值的时候《指南》中并没有提到。
html:
<input type="text" wicket:id="txtPassword">
java:
PasswordTextField pwf = new PasswordTextField("txtPassword", passwordModel);
pwf.setResetPassword(false);

初值:
设置完passwordModel的值后需要对控件进行设置以原密码而不是空:
pwf.setResetPassword(false);

-----------------------------------------

日期控件(DatePicker)
常用方法是将日期控件添加到一个文本框中,这样点选日期后文本框中将会显示日期,并且可以手动在文本框中进行日期的修改。
html:
<input type="text" wicket:id="txtRegisterDate" />
java:
DateTextField date = new DateTextField("txtRegisterDate", registerDateModel, "yyyy-MM-dd");
        date.setRequired(true);
        DatePicker dp = new DatePicker();
        date.add(dp);
        form.add(date);

"yyyy-MM-dd"用于格式化日期,但此控件只能取到日期而不能取到时间。

取值 :
取值时要注意,Model中的值要进行转换.
DateFormat tmpYearFormat = new SimpleDateFormat("yyyy-MM-dd");
String strRegisterDate = tmpYearFormat.format(registerDateModel.getObject()) + strRegDate;
Date registerDate = dateFormat.parse(strRegisterDate);

-----------------------------------------------------------------

树控件(TreeTable):
这个控件比较复杂,将树和表格集成到了一起。需要注意几点:1、列的显示  ;2、父子结点的生成;3、结点点击事件的处理。
1.使用IColumn定义要显示的列:
 private IColumn columns[] = new IColumn[]{new PropertyTreeColumn(new ColumnLocation(Alignment.LEFT, 180, Unit.PX), "菜单名称", "userObject.name"),
        new PropertyRenderableColumn(new ColumnLocation(Alignment.MIDDLE, 1, Unit.PROPORTIONAL), "菜单ID", "userObject.menuID"),
        new PropertyRenderableColumn(new ColumnLocation(Alignment.MIDDLE, 5, Unit.PROPORTIONAL), "编码", "userObject.code"),
        new PropertyRenderableColumn(new ColumnLocation(Alignment.RIGHT, 350, Unit.PX), "链接地址", "userObject.linkAddress"),};
2.树控件所使用的Model是它自己的TreeModel
我的方法从数据集中做递归取出父子关系的同时向TreeModel中添加结点:

private TreeModel treeModel;
实现:
treeModel = buildTreeModel(rootMenuID, "");
 /**
     * 得到TreeTable可使用的树结构
     */
    private TreeModel buildTreeModel(int parentID, String type) {
        recursionSysMenu(rootNode, parentID, type);
        return new DefaultTreeModel(rootNode);
    }

/**
     * 取得层次关系
     */
    private void recursionSysMenu(DefaultMutableTreeNode rtNode, int parentID, String type) {
        List sysMenuList = new ArrayList();
        sysMenuList = getSubSysMenuByParent(parentID, type);

for (int i = 0; i < sysMenuList.size(); i++) {
            SysMenu sysmenu = new SysMenu((SysMenu) sysMenuList.get(i));
            DefaultMutableTreeNode parentNode = new DefaultMutableTreeNode(sysmenu);
            rtNode.add(parentNode);
            //递归生成子菜单
            recursionSysMenu(parentNode, ((SysMenu) sysMenuList.get(i)).getMenuID(), type);
        }
    }

这样就可以生成一棵树了,如下:
html:
<div wicket:id="treeTable"></div>
java:
TreePage treePage = new TreePage("view");
tree = new TreeTable("treeTable", treePage.getTreeModel(), columns);
this.add(tree);
3.结点点击处理:
在定义的时候需要重写onNodeLinkClicked方法:
 TreePage treePage = new TreePage("view");
        tree = new TreeTable("treeTable", treePage.getTreeModel(), columns) {

@Override
            protected void onNodeLinkClicked(AjaxRequestTarget target, TreeNode node) {
                SysMenu menu = (SysMenu) ((DefaultMutableTreeNode) node).getUserObject();
                SysMenuEditContainer page = new SysMenuEditContainer(menu.getMenuID().toString());
                setResponsePage(page);
                getTreeState().selectNode(node, true);
                super.onNodeLinkClicked(target, node);
            }
        };

tree.setRootLess(true);
        tree.getTreeState().expandAll();
        tree.setLinkType(LinkType.REGULAR);
        add(tree);

tree.getTreeState().expandAll();//是将树的结点全部展开
setLinkType:点击时链接的方式,上面的方面是会刷新的,如果想不刷新可以使用AJAX,但具体没研究过。

wicket常用控件使用方法 .相关推荐

  1. openlayers添加按钮_OpenLayers3加载常用控件使用方法详解

    本文实例为大家分享了OpenLayers3加载常用控件使用的具体代码,供大家参考,具体内容如下 1. 前言 地图控件就是对地图的缩放.全屏.坐标显示控件等,方便我们对地图进行操作.OpenLayers ...

  2. Abaqus GUI程序开发之常用控件使用方法(八):快捷键设置

    一般的软件除了采用鼠标点击实现某些功能的调用外,通常都可以设置快捷键. Abaqus/CAE主窗口中菜单键中都有类似功能.如图所示,各菜单键名称下带有下划线的字符即对应的快捷按键,用户同时按住Alt+ ...

  3. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  4. C#常用控件属性及方法汇总

    窗体类控件 1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值 ...

  5. VS2010-MFC(常用控件:静态文本框)

    转自:http://www.jizhuomi.com/software/179.html 关于对话框的使用和各种通用对话框的介绍就到此为止,从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文 ...

  6. 设计器的使用及常用控件

    设计器的使用及常用控件 文章目录 设计器的使用及常用控件 一.设计器 二.设计器中的常用控件 一.设计器 1.设计器的使用 2.通过代码操作ui文件 #include "mainwindow ...

  7. 零基础学Android之常用控件

    常用控件 上次我们讲了布局:线性布局.表格布局.帧布局和相对布局,这个布局,它是在整个移动端设计内容的一个框架的方式,以什么方式来设计界面.最终在界面里面,放置的是控件,所谓控件,就是程序员可以控制的 ...

  8. VS2010/MFC编程入门之二十(常用控件:静态文本框)

    上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...

  9. 二级VB培训笔记06:窗体与常用控件综合案例【个人信息注册】

    二级VB培训笔记06:窗体与常用控件综合案例[个人信息注册] 一.常用控件属性与方法思维导图 二.综合案例--个人信息注册 1.创建工程,修改名称为"个人信息注册",窗体名称设置为 ...

最新文章

  1. 属性匹配工具_测试工具链——高效构建Mock服务
  2. map multimapc++_C++的Map和Multimap
  3. PWA项目实战分享(听书APP)
  4. javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
  5. 光线追踪技术的理论和实践(面向对象)
  6. Codeforces Round #325 (Div. 2) Laurenty and Shop 模拟
  7. 左外连接的sql语句_Django数据库连接和使用原生sql语句
  8. Nodejs 和PHP 性能测试结果
  9. python基础教程笔记—即时标记(详解)
  10. Ms SQL Server 约束和规则
  11. 自动配置jdk_JDK 15中自动自动发送更好的NullPointerException消息
  12. D3 selectselectAll
  13. 千万级测试String、StringBuffer和StringBuilder的速度
  14. HttpServletResponse类
  15. linux环境下pandas库的安装,Pandas库的基本使用 pip安装 Series DataFrame
  16. 计算机类专业试题及答案,2010年计算机类专业试题及答案
  17. 数字孪生实际应用案例-煤矿篇
  18. 关于知识分享和微软TechEd Roadshow
  19. 自定义联系人快速索引栏
  20. HttpCore和HttpClient

热门文章

  1. win10下的python3.5+ opencv安装攻略
  2. Linux(一) 概述 、 系统安装与分区
  3. 【机器视觉】Qt集成Halcon开发环境详解(一)
  4. 【STM32】FSMC相关函数和类型
  5. linux多级菜单脚本教程,linux shell 编写菜单脚本事例
  6. java技术详解_Java反射技术详解及实例解析
  7. C++中 引用与取地址的区别
  8. Codeforces 987B. High School: Become Human
  9. java学习笔记2022.1.12
  10. 1036 跟奥巴马一起编程 (15 分)(c++)C++