Wicket用戶手冊:能夠處理用戶輸入的HelloWorld

接下來的這個例子將會教會大家使用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的)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章