宋黎晓的空间

我们一直在努力....

FaceLets自定义组件

标签: JSF FaceLets 自定义组件 自定义控件

  JSF自定义组件是个比较繁琐的事情,需要扩展UIComponent接口,编写渲染器,Tag类,定义tld文件等诸多步骤.总之开发维护成本都比较高.FaceLets作为构建在JSF标准之上的一个视图处理框架,为我们提供了新的自定义组件方式,可以便捷的实现组件复用.这正是FaceLets的精华所在.


  在我们的OECP项目进展到界面开发阶段时,开发组发现很多类似页面的功能是通用的.例如弹出窗体参选数据的功能,N多界面上会使用到,没有必要每个开发组成员在每个界面上都自己写.这也就引出了封装自定义组件的需求.通过查找资料多次试验这个组件终于诞生了.先展示一下效果,相信大家就会明白自定义组件的好处了.
组件完成后开发人员只需要在界面上添加一行代码就可以实现弹出表格参选数据的功能:

XML/HTML代码
  1. <oecp:refTablePanle id="refPanl" refModel="#{testAction.refTableModel}" selectionMode="multi" />  


  点击需要回填的单元格后面的小图标,就会弹出数据选择界面.

  选择数据后点确定按钮,数据将会回填到界面上

 

  怎么样?一行代码就能搞定,是不是很爽呢?
  下面就说一下到底如何创建FaceLets自定义组件.上面说的那个组件由于比较复杂,就不在这里说了,大家可以在我们的开源项目--OECP初版完成后,在她的源代码中看到具体的实现方式.在这我就随便组合两个控件来介绍一下吧.
  要使用自定义组件首先要在web.xml文件中增加下面几行:

  我们可以看到这几行中有指定一个库文件oecp.taglib.xml,该文件命名必须是xxxx.taglib.xml的格式.然后再来看看这个文件的内容:


  指明命名空间<namespace>http://www.byyy.com/oecp</namespace>
  同时指明组件标签和组件源文件.


  组合控件的源文件就是这个了demo.xhtml

  注意一定要包含在<ui:composition>标签内哦.

  还要写一个后台类来支持随机数的生成

  在需要使用这个控件的界面中添加一行代码:

XML/HTML代码
  1. <oecp:demo id="demo" title="嘿嘿^_^" />  


  我们的自定义控件就出现在界面上了

 

  可能有的同学会提出这样的疑问,几个控件放在一起,为什么我不写一个文件,然后include进来不就行了吗? Include确实是一种实现代码复用的方式,不过比起自定义组件来它不能够传递变量.上面的小例子中我们有写到 title="嘿嘿^_^" 对应自定义控件中的<h:outputText value="#{title}" />也就是说 title是一个变量,是可以替换的.另外,include的方式还有一个缺点,就是被include进来的页面内的控件id很可能与包含它的页面内控件id发生重复,给开发人员命名时带来不必要的麻烦.而自定义控件则不会出现这样的问题.


  可能大家会发现,我们的自定义控件在开发环境中是没有代码提示的.确实是这样,如果我们想要代码提示,就请自己定义一个tld文件吧.当然这个文件是否存在,以及写的是否正确都不会影响我们的自定义控件的运行.tld文件如何定义比较简单,这里就不多说了,随便找个tld文件仿照一下就可以了.


  FaceLets自定义组件的方法还是蛮简单的,看过我的介绍相信大家现在也都学会了吧. 


  提供该文档的机构为 百洋软件研究实验室 ,更多的博客文章可以到 百洋软件研究实验室博客 查看。该文档附件欢迎各位转载,但是在没有获得文章作者许可之前,不得对文章内容或者版权信息进行更改,版权归百洋软件研究实验室所有,仅此声明。
 

附件:


    评分: 请先登录再投票,同一篇博客一月只能投票一次!
    无人投票

相关博客:


评论


发表评论

关注此文的人们还关注