<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    學習了一下wicket

    Posted on 2007-05-22 16:16 dennis 閱讀(2521) 評論(1)  編輯  收藏 所屬分類: java
        讀的是wl95421的《wicket開發指南-簡體中文版》,我之前沒有接觸過Tapestry,據說wicket借鑒了很多Tapestry的特性并做了相當的簡化。上手幾個demo后,感覺跟C/S的開發有點像,特別是類似delphi的組件型開發方式。一個頁面有一個Page和markup組成,Page繼承WebPage負責頁面的輸出,而markup文件描述界面,真正做到了html頁面與java代碼的分離,對網頁編輯工具友好。wicket是通過在html中添加id來實現分離,比如:
    <label wicket:id="name">這里輸出名字</label>

    在Page中添加要輸出的文字:
    this.add(new Label("name","dennis zane"));

        wicket與swing的設計理念一致,遵循MVC模式,Model用于提供數據,View是普通的html文件(markup文件),Controller是一個一個Page類。wicket同樣提供了很多的控件,這樣的開發方式非常類似ASP.net或者JSF,特別是一些高級控件的功能很強悍,比如Tree、TreeTable、GridView等等。感覺這個框架適合做快速開發,適用于中小型項目,因為此類項目的UI改動頻率比較大,同時代碼的侵入性太大。其他沒什么好談的,關于具體的開發請參考文檔了,比較少見的是與spring的集成,有一個wicket-spring的擴展包可以實現將spring容器管理的bean注入wicket的Page中,比如UserPage調用UserService:
             @SpringBean
            
    private UserService service;
    采用annotation標注。最后給個例子吧,整數的四則運算,首先看markup:
    <html>
    <title>加法計算</title>
    <body>
    <center>
    <span wicket:id ="feedback">這里用來輸出信息</span>
    <form wicket:id="form">
      
    <input type="text" size='10' wicket:id="a"/>&nbsp;<select wicket:id="oper"></select>&nbsp; <input type="text" size='10' wicket:id="b"/>&nbsp;=&nbsp;<label wicket:id="result"></label>
      
    <br><wicket:id ="sumit">add</a>
    </form>
    </center>
    </body>
    </html>

    一個feedback控件用于返回提示消息,兩個text控件用于輸入,一個下拉框用于選擇運算符,另外一個標簽顯示結果了,普通的html代碼,沒有什么好解釋的。再看TestPage.java:
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;

    import wicket.Component;
    import wicket.markup.html.WebPage;
    import wicket.markup.html.basic.Label;
    import wicket.markup.html.form.DropDownChoice;
    import wicket.markup.html.form.Form;
    import wicket.markup.html.form.SubmitLink;
    import wicket.markup.html.form.TextField;
    import wicket.markup.html.panel.FeedbackPanel;
    import wicket.model.Model;

    public class TestPage extends WebPage {

        
    private static List opers = new ArrayList();
        
    static {
            opers.add(
    "+");
            opers.add(
    "*");
            opers.add(
    "-");
            opers.add(
    "/");
        }

        
    private String oper = "+";

        
    private double result = 0;

        
    private double a = 0, b = 0;

        
    public TestPage () {
            
    super();
            add(
    new FeedbackPanel("feedback"));
            TextField ta 
    = new TextField("a"new Model() {
                
    public void setObject(Serializable obj) {
                    a 
    = ((Double) obj).doubleValue();
                }
            }, Double.
    class);
            TextField tb 
    = new TextField("b"new Model() {
                
    public void setObject(Serializable obj) {
                    b 
    = ((Double) obj).doubleValue();
                }
            }, Double.
    class);
            Form form 
    = new Form("form") {
                
    protected void onSubmit() {
                    
    switch (oper.toCharArray()[0]) {
                    
    case '+':
                        result 
    = a + b;
                        
    break;
                    
    case '-':
                        result 
    = a - b;
                        
    break;
                    
    case '*':
                        result 
    = a * b;
                        
    break;
                    
    case '/':
                        result 
    = a / b;
                        
    break;
                    
    default:
                        result 
    = a + b;
                    }
                }
            };
            add(form);

            form.add(ta);
            form.add(tb);
            Label label 
    = new Label("result"new Model() {
                
    public Object getObject(Component component) {
                    
    return String.valueOf(result);
                }
            });
            form.add(label);
            form.add(
    new SubmitLink("sumit"));
            DropDownChoice dropDownChoice 
    = new DropDownChoice("oper"new Model() {
                
    public void setObject(Serializable obj) {
                    oper 
    = (String) obj;
                }
            }, opers);
            dropDownChoice.setRequired(
    true);
            dropDownChoice.setNullValid(
    true);
            form.add(dropDownChoice);
        }
    }

    通過add方法添加控件,值的注意的就是怎么把控件跟Model聯系起來,這只是個小例子,直接重寫Model的setObject方法即可,將控件的值設置到變量以便計算。另外wicket的Page是線程安全的。

    評論

    # re: 學習了一下wicket  回復  更多評論   

    2007-07-12 08:25 by jet lee
    good
    主站蜘蛛池模板: 亚洲成A∨人片天堂网无码| 无码高潮少妇毛多水多水免费| 又黄又大又爽免费视频| 亚洲JIZZJIZZ妇女| 免费特级黄毛片在线成人观看| 亚洲日本人成中文字幕| 91在线视频免费91| 亚洲情A成黄在线观看动漫软件| 波多野结衣在线免费观看| 亚洲AV综合色区无码二区偷拍| 波多野结衣中文字幕免费视频 | 国产精品九九久久免费视频 | 一级特黄录像视频免费| 亚洲精品无码日韩国产不卡?V | 91精品国产免费久久国语麻豆| 77777_亚洲午夜久久多人| 7723日本高清完整版免费| 亚洲色欲色欲www| 午夜亚洲av永久无码精品| 国产福利电影一区二区三区,免费久久久久久久精 | 九九九国产精品成人免费视频| 国产AⅤ无码专区亚洲AV| 久久久久久影院久久久久免费精品国产小说 | 久青草国产免费观看| 亚洲成av人片在线观看无码不卡| 日韩免费无码视频一区二区三区| 亚洲精品乱码久久久久久下载| 欧美最猛性xxxxx免费| 全黄A免费一级毛片| 亚洲成色WWW久久网站| 久久久久久精品成人免费图片| 亚洲AV一区二区三区四区| 久久乐国产精品亚洲综合| **aaaaa毛片免费| 国产偷国产偷亚洲清高APP| 亚洲级αV无码毛片久久精品| 在线观看视频免费完整版| 九九全国免费视频| 亚洲国产精品成人精品小说| 亚洲AV网站在线观看| 最近2019免费中文字幕视频三|