[Apache Click快速开发]Click的组件(二) Menu、PickList和自定义TextArea

Menu组件:

Apache Click的菜单组件是可配置的,如果要使用它,必须提供一个提供菜单结构的xml文件,可以任意命名,这里就叫menu.xml好了。

首先定义层级结构(第二级menu节点表示一个菜单项)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <menu> <menu label="Home" path="#" imageSrc="/imgs/home.png" title="Home Page"> <menu label="Open" path="#" title="Open Files" target="_blank"/> <menu label="Setting" path="#" title="Settings" target="_blank"/> <menu label="Exit" path="#" title="Exit"/> </menu> <menu label="Demos" path="#" imageSrc="/imgs/controls.png" title="Click Demos"> <menu label="HelloPage" path="helloPage.htm" title="Hello Page" target="_blank"/> <menu label="HelloControls1" path="helloControls.htm" title="Hello Controls" target="_blank"/> <menu label="HelloControls2" path="helloControls2.htm" title="Hello Controls" target="_blank"/> </menu> </menu>

定义了菜单层级结构后,可以将web工程的任意位置,前提是对于你来说比较方便,这里就放在WEB-INF/目录(Apache Click默认的位置为classpath或者WEB-INF/)

之后就可以在Page中初始化菜单,我尝试在构造函数中将它初始化并添加到model中,但发现这样不起作用。官方的做法是重载onInit方法,并在这里将菜单初始化。

@Override public void onInit() { super.onInit(); MenuFactory mf = new MenuFactory(); //testMenu = mf.getRootMenu(); testMenu = mf.getRootMenu("myMenu", "/WEB-INF/menu.xml"); addControl(testMenu); }

这样的话,在htm中使用$myMenu可以将菜单显示出来。

但如果不在head标签中加入$headElements,你可能看到下面的样子

PickList组件:

PickList的实现为什么节省了大量的书写javascript代码的时间,也使得开发者摆脱了在html页面中麻烦地初始化选项值的烦恼。

private PickList pickList = new PickList("myPickList", "想去的地方");pickList.setHeaderLabel("", ""); pickList.add(new Option("001", "北京故宫")); pickList.add(new Option("002", "北京长城")); pickList.add(new Option("003", "北京")); pickList.add(new Option("004", "四川九寨沟")); pickList.add(new Option("005", "西藏布达拉宫")); pickList.add(new Option("006", "西藏雪域天山")); pickList.add(new Option("007", "其他")); pickList.addSelectedValue("001"); form.add(pickList);


自定义TextArea:
Click中,可以继承TextArea类来自定义文本区域,可以整合著名的fckeditor、yui editor等等,非常之方便,充分体现了Click组件设计的灵活性。

public class FCKTextArea extends TextArea { @Override public List<Element> getHeadElements() { // TODO Auto-generated method stub headElements = super.getHeadElements(); if(headElements!=null){ headElements.add(new JsImport("/js/ckeditor/ckeditor.js")); } return headElements; } }

我的ckeditor文件包是位于工程webroot/js下面。有了自定义文本域后,在Page中的使用变得简单

private FCKTextArea remark;remark = new FCKTextArea(); remark.setCols(70); remark.setRows(11); remark.setAttribute("class", "ckeditor"); remark.setName("remark"); remark.setLabel("留言"); form.add(remark);

最后,在htm页面中讲表单显示以后漂亮的fckeditor就有了。。这得益于Click中AbstractControl提供的getHeadElements抽象方法,有了它,开发者就可以导入样式表和Javascript脚本文件,从而实现自定义的组件。That's cool





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值