读的是
wl95421的《wicket开发指南-简体中文版》,我之前没有接触过Tapestry,据说wicket借鉴了很多Tapestry的特性并做了相当的简化。上手几个demo后,感觉跟C/S的开发有点像,特别是类似delphi的组件型开发方式。一个页面有一个Page和markup组成,Page继承WebPage负责页面的输出,而markup文件描述界面,真正做到了html页面与java代码的分离,对网页编辑工具友好。wicket是通过在html中添加id来实现分离,比如:
在Page中添加要输出的文字:
wicket与swing的设计理念一致,遵循MVC模式,Model用于提供数据,View是普通的html文件(markup文件),Controller是一个一个Page类。wicket同样提供了很多的控件,这样的开发方式非常类似ASP.net或者JSF,特别是一些高级控件的功能很强悍,比如Tree、TreeTable、GridView等等。感觉这个框架适合做快速开发,适用于中小型项目,因为此类项目的UI改动频率比较大,同时代码的侵入性太大。其他没什么好谈的,关于具体的开发请参考文档了,比较少见的是与spring的集成,有一个wicket-spring的扩展包可以实现将spring容器管理的bean注入wicket的Page中,比如UserPage调用UserService:
一个feedback控件用于返回提示消息,两个text控件用于输入,一个下拉框用于选择运算符,另外一个标签显示结果了,普通的html代码,没有什么好解释的。再看TestPage.java:
通过add方法添加控件,值的注意的就是怎么把控件跟Model联系起来,这只是个小例子,直接重写Model的setObject方法即可,将控件的值设置到变量以便计算。另外wicket的Page是线程安全的。
<
label
wicket:id
="name"
>
这里输出名字
</
label
>
在Page中添加要输出的文字:
this
.add(
new
Label(
"
name
"
,
"
dennis zane
"
));
wicket与swing的设计理念一致,遵循MVC模式,Model用于提供数据,View是普通的html文件(markup文件),Controller是一个一个Page类。wicket同样提供了很多的控件,这样的开发方式非常类似ASP.net或者JSF,特别是一些高级控件的功能很强悍,比如Tree、TreeTable、GridView等等。感觉这个框架适合做快速开发,适用于中小型项目,因为此类项目的UI改动频率比较大,同时代码的侵入性太大。其他没什么好谈的,关于具体的开发请参考文档了,比较少见的是与spring的集成,有一个wicket-spring的扩展包可以实现将spring容器管理的bean注入wicket的Page中,比如UserPage调用UserService:
@SpringBean
private UserService service;
采用annotation标注。最后给个例子吧,整数的四则运算,首先看markup:
private UserService service;
<
html
>
< title > 加法计算 </ title >
< body >
< center >
< span wicket:id ="feedback" > 这里用来输出信息 </ span >
< form wicket:id ="form" >
< input type ="text" size ='10' wicket:id ="a" /> < select wicket:id ="oper" ></ select > < input type ="text" size ='10' wicket:id ="b" /> = < label wicket:id ="result" ></ label >
< br >< a wicket:id ="sumit" > add </ a >
</ form >
</ center >
</ body >
</ html >
< title > 加法计算 </ title >
< body >
< center >
< span wicket:id ="feedback" > 这里用来输出信息 </ span >
< form wicket:id ="form" >
< input type ="text" size ='10' wicket:id ="a" /> < select wicket:id ="oper" ></ select > < input type ="text" size ='10' wicket:id ="b" /> = < label wicket:id ="result" ></ label >
< br >< a wicket:id ="sumit" > add </ a >
</ form >
</ center >
</ body >
</ html >
一个feedback控件用于返回提示消息,两个text控件用于输入,一个下拉框用于选择运算符,另外一个标签显示结果了,普通的html代码,没有什么好解释的。再看TestPage.java:
import
java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import wicket.Component;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.DropDownChoice;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.SubmitLink;
import wicket.markup.html.form.TextField;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.Model;
public class TestPage extends WebPage {
private static List opers = new ArrayList();
static {
opers.add( " + " );
opers.add( " * " );
opers.add( " - " );
opers.add( " / " );
}
private String oper = " + " ;
private double result = 0 ;
private double a = 0 , b = 0 ;
public TestPage () {
super ();
add( new FeedbackPanel( " feedback " ));
TextField ta = new TextField( " a " , new Model() {
public void setObject(Serializable obj) {
a = ((Double) obj).doubleValue();
}
}, Double. class );
TextField tb = new TextField( " b " , new Model() {
public void setObject(Serializable obj) {
b = ((Double) obj).doubleValue();
}
}, Double. class );
Form form = new Form( " form " ) {
protected void onSubmit() {
switch (oper.toCharArray()[ 0 ]) {
case ' + ' :
result = a + b;
break ;
case ' - ' :
result = a - b;
break ;
case ' * ' :
result = a * b;
break ;
case ' / ' :
result = a / b;
break ;
default :
result = a + b;
}
}
};
add(form);
form.add(ta);
form.add(tb);
Label label = new Label( " result " , new Model() {
public Object getObject(Component component) {
return String.valueOf(result);
}
});
form.add(label);
form.add( new SubmitLink( " sumit " ));
DropDownChoice dropDownChoice = new DropDownChoice( " oper " , new Model() {
public void setObject(Serializable obj) {
oper = (String) obj;
}
}, opers);
dropDownChoice.setRequired( true );
dropDownChoice.setNullValid( true );
form.add(dropDownChoice);
}
}
import java.util.ArrayList;
import java.util.List;
import wicket.Component;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.DropDownChoice;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.SubmitLink;
import wicket.markup.html.form.TextField;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.Model;
public class TestPage extends WebPage {
private static List opers = new ArrayList();
static {
opers.add( " + " );
opers.add( " * " );
opers.add( " - " );
opers.add( " / " );
}
private String oper = " + " ;
private double result = 0 ;
private double a = 0 , b = 0 ;
public TestPage () {
super ();
add( new FeedbackPanel( " feedback " ));
TextField ta = new TextField( " a " , new Model() {
public void setObject(Serializable obj) {
a = ((Double) obj).doubleValue();
}
}, Double. class );
TextField tb = new TextField( " b " , new Model() {
public void setObject(Serializable obj) {
b = ((Double) obj).doubleValue();
}
}, Double. class );
Form form = new Form( " form " ) {
protected void onSubmit() {
switch (oper.toCharArray()[ 0 ]) {
case ' + ' :
result = a + b;
break ;
case ' - ' :
result = a - b;
break ;
case ' * ' :
result = a * b;
break ;
case ' / ' :
result = a / b;
break ;
default :
result = a + b;
}
}
};
add(form);
form.add(ta);
form.add(tb);
Label label = new Label( " result " , new Model() {
public Object getObject(Component component) {
return String.valueOf(result);
}
});
form.add(label);
form.add( new SubmitLink( " sumit " ));
DropDownChoice dropDownChoice = new DropDownChoice( " oper " , new Model() {
public void setObject(Serializable obj) {
oper = (String) obj;
}
}, opers);
dropDownChoice.setRequired( true );
dropDownChoice.setNullValid( true );
form.add(dropDownChoice);
}
}
通过add方法添加控件,值的注意的就是怎么把控件跟Model联系起来,这只是个小例子,直接重写Model的setObject方法即可,将控件的值设置到变量以便计算。另外wicket的Page是线程安全的。
![119149.html](https://i-blog.csdnimg.cn/blog_migrate/497e18248a2c48c98137c9559fd5f2ef.jpeg)