|
喵。猫咪的Wicket专辑又和大家见面了。猫咪在文章完成的第一时间就发到这里。希望大家多多提意见。大家随时可以访问猫咪的Blog留言,地址是http://blog.sina.com.cn/u/1400658603今天猫咪写个稍微难一点的例子,做一个留言本。这个例子比前面的两个例子可复杂多了。具体配置环境猫咪就不多说了,大家可以参考猫咪之前写的Wicket例子。 首先,建立控制器。创建一个Application。BookApplication代码如下:
package org.Miao; import wicket.protocol.http.WebApplication; public class BookApplication extends WebApplication { public Class getHomePage() { return GuestBook.class; } }
然后修改web.xml文件,配置好Wicket控制器。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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"> <display-name>MiaoBook</display-name> <servlet> <servlet-name>BookApplication</servlet-name> <servlet-class>wicket.protocol.http.WicketServlet</servlet-class> <init-param> <param-name>applicationClassName</param-name> <param-value>org.Miao.BookApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>BookApplication</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> </web-app>
OK。现在我们可以进行具体的编码了。 首先我们要建立一个类,用来保存留言。类Comment.java内容如下:
package org.Miao; import java.io.Serializable; import java.util.Date; public class Comment implements Serializable{ private String text; private Date date=new Date(); public Comment(){ } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
相当简单吧。这个类中的text属性保存了留言内容,date属性保存留言时间。所有属性均实现了get/set方法。 好了,现在猫咪开始编辑最复杂的部分。建立一个新的WebPage,名字一定要和BookApplication里返回的类名称一致,叫“GuestBook.class”。这个类比较复杂,猫咪也是看了好久才搞明白的。猫咪会尽量在代码中写注释,让大家明白代码的功能。如果大家对代码还是不太清楚,可以参考Wicket的doc文档。GuestBook.class代码如下:
package org.Miao; import java.util.List; import java.util.Vector; import wicket.markup.html.WebPage; import wicket.markup.html.basic.Label; import wicket.markup.html.basic.MultiLineLabel; import wicket.markup.html.form.Form; import wicket.markup.html.form.TextArea; import wicket.markup.html.list.ListItem; import wicket.markup.html.list.ListView; import wicket.model.PropertyModel; public class GuestBook extends WebPage { private static final long serialVersionUID = 1L; //建立一个Vector集合对象,保存留言记录类Comment.java private static final List commentList = new Vector(); //ListView是一个列表控件,用来显示留言 private final ListView commentListView; //构造函数 public GuestBook() { //首先,添加一个新的CommentForm对象,用来处理表单 add(new CommentForm("commentForm")); //添加一个新ListView,用来显示commentList中的留言 add(commentListView =new ListView("comments",commentList) { //ListView本身是一个抽象类,所以实例化时必须实现populateItem方法。 public void populateItem(final ListItem listItem) { //取到新添加的留言 final Comment comment = (Comment)listItem.getModelObject(); //在ListView中添加一个标签,把留言日期写上 listItem.add(new Label("date", comment.getDate().toString())); //在ListView中添加一个多行标签,把留言内容写上 listItem.add(new MultiLineLabel("text", comment.getText())); } }); } //CommentForm继承自Form类,负责处理页面的表单请求。 public final class CommentForm extends Form { //在页面被加载时,新建立一个Comment用来保存留言。 private final Comment comment = new Comment(); public CommentForm(final String componentName) { super(componentName); /* 添加一个文本输入框,名字“text”。同时和commnet的text属性绑定。当文本框内容改变时,comment的text也会被同时改变。 */ add(new TextArea("text", new PropertyModel(comment, "text"))); } //onSubmit用于处理表单提交请求 public final void onSubmit() { //建立一个新的comment,用来把留言放到Vector集合commentList中。 final Comment newComment = new Comment(); //把留言取出来,放到集合中去 newComment.setText(comment.getText()); commentList.add(0, newComment); //通知ListView内容改变,刷新页面 commentListView.modelChanged(); //把comment内的留言清空 comment.setText(""); } } }
不知道大家能不能看懂。如果看了doc还是看不明白,可以给猫咪留言。 然后是模版网页GuestBook.html。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <form wicket:id = "commentForm"> Add your comment here: <p> <textarea wicket:id = "text">This is a comment</textarea> <p> <input type = "submit" value = "Submit"/> </form> <p> <span wicket:id = "comments"> <p> <span wicket:id = "date">1/1/2004</span><br> <span wicket:id = "text">Comment text goes here.</span> </p> </span> </p> </body> </html>
Form的属性标签wicket:id = "commentForm"把这个标签和类中的控件CommentForm绑定。Textarea标签的wicket:id = "text"属性则把它和CommentForm中的控件TextArea绑定。只要表单提交,就会把textarea中的内容保存到类中去。<span wicket:id = "comments">部分和ListView控件绑定,控制如何显示留言列表。<span wicket:id = "date">控制日期显示,<span wicket:id = "text">控制留言内容。id名字和控件的名字必须一致,不然就会发生异常。 目前猫咪在wicket的doc文档中,没找到多少有关wicket网页标签的帮助。大家使用中最好多进行一些试验。如果大家发现标签的其它用法或者又什么问题,可以给猫咪留言。 好了,如果没有写错。大家应该看到下面的画面。
猫咪这几天博客的浏览人数大增,猫咪感到很欣慰。但是猫咪发现大家都没有在浏览的时候留言,希望大家多给猫咪提点意见,给点鼓励。让猫咪有足够的动力写下去。还有,如果有人要转载猫咪的文章,请一定要把猫咪的博客地址写上,而且一定要告诉猫咪。
|