|
本帖最后由 有容乃大 于 9.4.2011 21:13 编辑
Wicket应用至少需要一个Wicket Application
package com.mycompany;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
public class SampleApplication extends WebApplication {
@Override
public Class<? extends Page> getHomePage() {
return Index.class;
}
}SampleApplication .java
Wicket的WebApplication比Java EE定义的Web应用的粒度更小,一个War包中可以对应多个Wicket的WebApplication(与传说中的CAR包有几分相似)。getHomePage方法指定了首页,一个类对应一个页面,所以Index.class就能表示一个页面资源。根据下面index页面的实现代码,就更能体会这一个类是如何对应到一个页面的。
package com.mycompany;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.link.Link;
public class Index extends WebPage {
public Index(){
add(new Link<String>("lnk1"){
@Override
public void onClick() {
setResponsePage(FormSample.class);
}
});
}
}
Index.java
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Wicket Sample</title>
</head>
<body>
<a wicket:id="lnk1">Go to Form Sample</a>
</body>
</html>
Index.html
这两个文件就是作为首页需要的全部内容,默认配置下,这两个文件需要在同一个package内。html内的wicket:id="lnk1与java代码内的new Link<String>("lnk1")相对应,所有带wicket:id属性的标签,全部会被服务器端组件生成的内容替换。这里我们看到,java端有个onClick方法,这表示我们的link支持服务器端事件,点击后服务器端会执行onClick方法内的内容,重定向到FormSample页面。
接下来,我们再来看一下FormSample这页面,这个页面实现最简单的表单提交功能,在一个文件框内输入文字后提交,服务器端会把刚才输入的文字在一个span内打出来。
package com.mycompany;
import org.apache.wicket.IClusterable;
public class FormInputModel implements IClusterable {
private static final long serialVersionUID = 5201088805280471789L;
private String inputString;
private String info;
public String getInputString() {
return inputString;
}
public void setInputString(String inputString) {
this.inputString = inputString;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
}
FormInputModel.java
package com.mycompany;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
public class FormSample extends WebPage {
public FormSample() {
add(new InputForm("form1"));
}
public static class InputForm extends Form<FormInputModel> {
public InputForm(String id) {
super(id, new CompoundPropertyModel<FormInputModel>(new FormInputModel()));
add(new TextField<String>("inputString").setRequired(true).setLabel(new Model<String>()));
add(new Label("info"));
add(new Button("saveButton"));
}
@Override
public void onSubmit() {
FormInputModel model = (FormInputModel) getDefaultModelObject();
model.setInfo(model.getInputString());
}
}
}FormSample.java
<html xmlns="http://www.w3.org/1999/xhtml" ><head> <title>Wicket Examples - helloworld</title> <link rel="stylesheet" type="text/css" href="style.css"/></head><body> <form wicket:id="form1"> <input wicket:id="inputString" type="text" /> <br /> <span wicket:id="info"></span> <br /> <input wicket:id="saveButton" type="submit" value="submit" /> </form></body></html>
FormSample.html
这里的Form需要一个Model,具体与Form里的字段对应,在这个Form里面,有inputString,info共两个字段,所以我们的model也是这么简单的一个Bean。Form提交的时候,同样也是服务器端事件:由onSubmit这个方法来处理。处理也很简单,只需要修改一个Model的值。
最近,怎么把这些代码组成一个Wicket应用呢?看一下web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Wicket Examples</display-name> <filter> <filter-name>WicketExampleApplication</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>com.mycompany.SampleApplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>WicketExampleApplication</filter-name> <url-pattern>/examples/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <session-config> <session-timeout>5</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list></web-app>一个Wicket的WebApplication有一个Filter来处理,如果有多个就可以配置多个。这里其实也可以有用Servlet,用Filter可以实现更强大的功能
最后,整个project是如下的一个目录结构:
myproject
│ pom.xml
│
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─mycompany
│ │ │ FormInputModel.java
│ │ │ FormSample.html
│ │ │ FormSample.java
│ │ │ Index.html
│ │ │ Index.java
│ │ │ SampleApplication.java
│ │ │
│ │ ├─resources
│ │ └─webapp
│ │ └─WEB-INF
│ │ web.xml
│ │
│ └─test
│ ├─java
│ └─resources
└─target |
|