首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Wicket 开发笔记(3)

Wicket 开发笔记(3)

在 TableList 这类的控件中添加 Link、Button                之类的事件响应元素在                TableList 这类的控件中添加 Link、Button 之类的事件响应元素
还是关于 List 的问题,有时候我们需要往行里面添加一些 Action 按钮,这个也是比较常见的,下面图 5 这样的例子,具体实现如清单 8、清单                9 所示
图 5.清单 8.ActionPanel 的 Java 实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 首先我们需要创建这个 action 对应的 Panel 容器。
private class ActionPanel extendsPanel
{
public ActionPanel(String id, finalIModel<ProductBean> model)
     {
super(id, model);
/* 这个是给 Panel 里面添加各个 link 标签,在各自的 onclick 事件里来做自己的
                    逻辑处理,同时 model.getObject() 通过这个方法我们就可以拿到绑定到当
                   前 Panel 上的 Model 对象,一般我们会绑定当前行对应的 databean。*/
add(newLink<ProductBean>("Startup", model)
         {
@Override
public void onClick()
             {
                 ProductBean pb = model.getObject();
             }
         });
add(newLink<ProductBean>("Shutdown", model)
         {
@Override
public
                voidonClick()
             {
                 ProductBean pb = model.getObject();               
             }
         });
add(newLink<ProductBean>("Delete", model)
         {
@Override
public void onClick()
             {
                 ProductBean pb = model.getObject();
                 
             }
         });
     }
}
// 对于 column 的设定,同样的利用 column 的 populateItem 方法对 actions 设置 Panel。
columns.add(newAbstractColumn<ProductBean>(newModel<String>("Actions")){

public void populateItem(
Item<ICellPopulator<ProductBean>> cellItem, String componentId,  IModel<ProductBean> model)
     {
cellItem.add(newActionPanel(componentId, model));
     }
});




清单 9.ActionPanel 的 Html 代码
1
2
3
4
5
<wicket:panel xmlns:wicket="http://wicket.apache.org">
<a href="#"wicket:id="Startup">Startup</a>&nbsp;|&nbsp;
<a href="#"wicket:id="Shutdown">Shutdown</a>&nbsp;|&nbsp;
<a href="#"wicket:id="Delete">Delete</a>
</wicket:panel>




定制自己的 Validator对于页面上的有些输入框,有时候我们需要定制自己的 Validator,在 Wicket里面我们应该怎么做呢,下面举个例子:
比如我们在要给 Textbox里输入多个 email地址,以逗号分割,然后我们要实现这样的 Validator。代码如清单 10 所示。
清单 10. EmailAddressValidatorEx                的实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
protected class EmailAddressValidatorEx extendsEmailAddressValidator
{
@Override
protected void onValidate(IValidatable<String> validatable)
     {
String[] mails = validatable.getValue().split(",");
for(String mail : mails)
         {
Validatable<String> vMail = newValidatable<String>(mail);
             vMail.setModel(validatable.getModel());
super.onValidate(vMail);
if(vMail.getErrors().size() > 0)
             {
ValidationError vee = newValidationError();
// 其实这个地方我们也可以直接设置 message,而不是
// 从 properties 去取 message,当然是不在需要国际化的时候。
//vee.setMessage(mail + " is not a valid email address.");
vee.addMessageKey("EmailAddressValidatorEx");
                 validatable.error(vee);
             }
         }
     }
}
// 使用的地方我们只需要对 components 加入这个 validator 就可以了。
taskForm.add(new TextField<String>("reportTo").add(new EmailAddressValidatorEx()));

返回列表