x档案结局:[Apache Click快速开发]Click的组件(一)

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 05:41:24

[Apache Click快速开发]Click的组件(一)

分类: Java 2011-09-23 18:28 288人阅读 评论(4) 收藏 举报

Click的组件很多,功能强大,能满足绝大多数开发情况。

您还可以书写自定义组件,当然这会花费您更多的时间,由您决定。 我们首先看一下Click自带的组件。

我试图用一个表单来尝试显示出平常我们使用的html元素,但是发现它远不止这些,比如还有html中没有的Menu,PickList,EmialField,TablePaginator等等。

HelloPage.java

view plaincopy to clipboard?

  1. package com.apc.pages;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.click.control.ActionLink;  
  7. import org.apache.click.control.FileField;  
  8. import org.apache.click.control.Form;  
  9. import org.apache.click.control.Option;  
  10. import org.apache.click.control.PasswordField;  
  11. import org.apache.click.control.Radio;  
  12. import org.apache.click.control.RadioGroup;  
  13. import org.apache.click.control.Select;  
  14. import org.apache.click.control.Submit;  
  15. import org.apache.click.control.TextField;  
  16. import org.apache.click.dataprovider.DataProvider;  
  17. import org.apache.click.extras.control.CheckList;  
  18.   
  19. public class HelloControls extends org.apache.click.Page {  
  20.     private Form form = new Form("controlForm");  
  21.     private TextField tf;  
  22.     private PasswordField pf;  
  23.     private Select select;  
  24.     private Select multiSelect;  
  25.     private CheckList cl;  
  26.     private RadioGroup rg;  
  27.     private FileField ff;  
  28.     public ActionLink al = new ActionLink("al", this, "onActionLinkTrigger");  
  29.       
  30.     private void init(){  
  31.         //textfield   
  32.         tf = new TextField("username", "账号", true);  
  33.         tf.setMinLength(5);  
  34.         tf.setMaxLength(16);  
  35.         //paswordfield   
  36.         pf = new PasswordField("passwd", "密码", false);  
  37.         tf.setMinLength(6);  
  38.         //select   
  39.         select = new Select("gender", "性别");  
  40.         select.setDataProvider(new DataProvider
  41.             public List
  42.                 List
  43.                 options.add(new Option("男", "男"));  
  44.                 options.add(new Option("女", "女"));  
  45.                 return options;  
  46.             }  
  47.         });  
  48.         select.setValue("男");  
  49.         //multi-select   
  50.         multiSelect = new Select("hobby", "爱好");  
  51.         multiSelect.setMultiple(true);  
  52.         multiSelect.setDataProvider(new DataProvider
  53.             public List
  54.                 List
  55.                 options.add(new Option("看电影","看电影"));  
  56.                 options.add(new Option("踢足球", "踢足球"));  
  57.                 options.add(new Option("看书", "看书"));  
  58.                 return options;  
  59.             }  
  60.         });  
  61.         multiSelect.setDefaultOption(Option.EMPTY_OPTION);  
  62.         //radio   
  63.         rg = new RadioGroup("marriage");  
  64.         rg.add(new Radio("未婚", "未婚"));  
  65.         rg.add(new Radio("已婚", "已婚"));  
  66.         rg.setValue("未婚");  
  67.           
  68.         //checkbox   
  69.         cl = new CheckList("getway","您从哪里获知我们");  
  70.         cl.addAll(new String[]{"网络","电视","朋友","其他"});  
  71.         //filefield   
  72.         ff = new FileField("photo", "您的照片");  
  73.           
  74.     }  
  75.       
  76.     public HelloControls(){  
  77.         init();  
  78.           
  79.         addControl(form);  
  80.         form.add(tf);  
  81.         form.add(pf);  
  82.         form.add(select);  
  83.         form.add(multiSelect);  
  84.         form.add(rg);  
  85.         form.add(cl);  
  86.         form.add(ff);  
  87.         form.add(new Submit("保存",this,"onSubmitClick"));  
  88.         form.add(new Submit("取消", this, "onCancelClick"));  
  89.     }  
  90.     public boolean onSubmitClick(){  
  91.         return false;  
  92.     }  
  93.     public boolean onCancelClick(){  
  94.         return true;  
  95.     }  
  96.     public boolean onActionLinkTrigger(){  
  97.         addModel("msg", "您点击了actionLink");  
  98.         return false;  
  99.     }  
  100. }  
Page中添加了1个form表单,表单中分别添加了TextField,PasswordField,Select,RadioGroup,CheckList,FileField,ActionLink

helloPage.htm

view plaincopy to clipboard?

  1.   
  2.     
  3.       
  4.     Blank  
  5.     $headElements  
  6.     
  7.     
  8.   
    Learn more
      
  9.   
    $controlForm
      
  10.   #if($msg)  
  11.         $msg
  
  •   #end  
  •   $jsElements  
  •     
  •   
  • 最终在Safari中请求helloPage您会看到


    初始化TextField的时候可以添加第三个参数来表示需要非空验证,如 tf = new TextField("username", "账号", true); 所以,当您未填写任何信息的时候,点击提交会出现错误提示,这就为我们节省了很多去写验证方法的事件,看看它的提示信息是怎样的吧.。



    我还加入了最简单的actionlink事件,点击上方的 learn more 下面就会出现msg的提示,你所要做的只是在处理方法中用addModel,将消息添加到model中。


    总结:Click的组件直接在java文件中编译好,速度很快;基于事件驱动的方式也是不错的。