到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article//showarticle.jsp?column=23&thread=56713访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
Wicket初次接触3之GuestBook
作者:wlmouse 来源:www.javaresearch.org  发布时间:2006-10-18 13:11:13.157


  喵。猫咪的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网页标签的帮助。大家使用中最好多进行一些试验。如果大家发现标签的其它用法或者又什么问题,可以给猫咪留言。
  好了,如果没有写错。大家应该看到下面的画面。
 
  猫咪这几天博客的浏览人数大增,猫咪感到很欣慰。但是猫咪发现大家都没有在浏览的时候留言,希望大家多给猫咪提点意见,给点鼓励。让猫咪有足够的动力写下去。还有,如果有人要转载猫咪的文章,请一定要把猫咪的博客地址写上,而且一定要告诉猫咪。

 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读