欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Wicket用户手册:能够处理用户输入的HelloWorld wicket框架SwingHTML工作 

程序员文章站 2022-07-15 15:28:29
...

接下来的这个例子将会教会大家使用Wicket开发一个能够处理用户输入的程序,这个程序虽然简单,但也基本上描述了如何使用Wicket处理用户的输入。

我们会修改上面的的例子,增加处理用户输入的功能。也就是在页面上显示一个文本框,以用户 输入数据,并提交到服务器,再将用户 输入的信息显示在页面上。

这是HTML模板文件

<html>  <body>    <span wicket:id="message">Message goes here</span>    <form wicket:id="messageInputForm">    	<input type="text" wicket:id="messageInput"/>    	<input type="submit" value="update"/>    </form>  </body></html>  

在上面的模板文件中,我们看到了三个标签,他们分别是:"message","messageInputForm","messageInput",除了上一个例子里面的Label控件之外,我们现在 又多了一个Form和一个Input控件,接下来的代码,显示如何使用 这两个控件。

相应的Java代码

package mypackage;import wicket.markup.html.WebPage;import wicket.markup.html.basic.Label;import wicket.markup.html.form.Form;import wicket.markup.html.form.TextField;import wicket.model.IModel;import wicket.model.Model;public class HelloWorld extends WebPage{  public HelloWorld()  {    IModel messageModel = new Model("Hello World!");    add(new Label("message", messageModel));    add(new MessageForm("messageInputForm", messageModel));  }  private final class MessageForm extends Form  {    public MessageForm(String id, IModel model)    {      super(id);      add(new TextField("messageInput", model));    }    protected void onSubmit()    {      // nothing to do here as the model is automatically updated    }  }}  

你可能首先注意到控件是可以嵌套的。MessageForm是一个Form控件,它和message所代表的Label控件是兄弟关系,都在HelloWorld这个页面控件内部。作为兄弟,它们的ID号必须唯一,否则它们的父母就无法准确的区分它们。而messageInput这个TextField控件则作为messageForm控件的孩子,它的作用域是限于 messageForm内部,所以messageInput控件在模板中的标签也嵌套在messageForm内部。

接下来要了解一个如何使用 Model对象。象上文提到的,每一个Wicket控件都会有一个Model。至于如何这个Model,哈哈,就由控件自己说了算。接下来文章将会告诉你如何使用Model。正如前面提到的,每个Wicket控件都会有一个Model,象Label控件就会使用Model提供的的信息输出,而一个列个控件ListView就会使用 java.util.List作为模型数据,并循环遍历这些数据(译注:其实使用的是Model.getModelObject()),Wicket提供了wicket.model.IModel这个接口,只要实现了这个接口 ,就可以作为一个Model被Wicket控件所使用 。

为了处理用户输入,必须使用Form控件。Form控件可以根据用户 的输入自动将Form内部嵌套的控件进 行自动更新。它会逐个调用内部控件的setObject()方法来更新控件的数据。因此当一个用户点击了Submit按钮后,Wicket会自动更新控件中的值。象上面的例子,Label控件和TextField文本控件使用 的是同一个Model,因此当TextField输入控件更新后,Label的输出也会自动更新(译注:这也从另外一个方面说明Wicket是基于Stateful的)。