当前位置: 首页 > article >正文

JSF in Action读书笔记(二)自定义UIComponent

编写自己的Component的步骤:
1、继承一些类或实现一些接口
比如UIComponentBase, Render, Converter, Validator等;
比如例子中的UIInputDate,就需要扩展UIInput,先定义Family和Type,并在构造函数中指定Render为null(因为不需要Render,而是component自己实现),编写encodeBegin和decode方法(在这里,encode是指将JSF的component编码为HTML,而decode是指用HTML中的值更新component的properties);因为需要保存状态,所以编写saveState和restoreState方法;

2、在faces-config.xml中进行配置;

3、编写Tag处理程序与JSP进行整合(当然,还有TLD文件)
以UIInputDate为例,需要继承UICommonTag,先实现getComponentType和getRenderType;因为要在JSP中保存component的状态,所以也要在tag中定义这些属性,并实现setProperties方法,及release方法;编写验证TEI,实现isValid方法和isTrue方法

4、将所有这些打包package成jar文件,将faces-config.xml放在META-INF目录中;

从前到后的顺序分析自定义组件的调用过程
在JSF中自定义一个组件需要了解的概念很多,render, component,tag,这些概念之间又有相互重叠的概念部分,比如在component中有的属性在tag中也需要有,如果更好的理解这些类之间的协作过程,一个比较好的办法就是从前端到后端的分析一个view被解析,并调用相应render, component的过程。

比如,在JSP文件中有如下代码:

< jia:navigatorToolbar  id ="toolbar"  layout ="horizontal"
           headerClass
="toolbar-header"  itemClass ="toolbar-command"
           selectedItemClass
="toolbar-command"  iconClass ="toolbar-icon"
           immediate
="false" >


很明显,这是一个自定义组件,这些Tag需要有一个TagSupport类来读取这些数据,这个类就是Navigation_ToolbarTag。

这个Tag Support类很重要,它起到一个连接JSP页面与后端UIComponent的作用,怎么实现的? 主要通过几个方法:
1、getComponentType(),通过这个方法,可以得知这个tag对应的是哪个UIComponent;
2、getRendererType() 它返回一个字符串,表明用哪个Render来向客户端呈现UIComponent;
3、setProperties(UIComponent component)一个很重要的方法,将tag中的属性传递给UIComponent。
有了这三个方法,就可以基本实现将JSP与UIComponent整合在一起了。

然后,就是调用Render的encodingBegin,生成对应的HTML代码。 

http://www.lryc.cn/news/2415316.html

相关文章:

  • 认识数字影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)
  • red5流媒体服务器系统,red5 流媒体服务器配置
  • LaTeX之写论文有用的指令
  • 无法访问计算机请检查名称的拼写,win10系统访问共享文件夹提示“请检查名称的拼写”的修复方案...
  • Javascript如何阻止事件的默认行为?
  • C++模仿超炫Vista风格QQ界面,这个QQ界面真的是满满的回忆啊!
  • [原创]走上IT之路的坎坷经历
  • MyEclipse6.5 汉化方法(未测试)
  • SQL数据库增删改查
  • Struts 2 下载文件(12)
  • 移动硬盘接口坏了怎么办解决教程
  • Linux下Nodejs安装(完整详细)
  • 电脑缺失d3dx9_42.dll文件怎么解决,教你5种有效的解决方法
  • DIV滚动条属性及样式设置方式
  • tomcat 服务器使用 url rewrite (地址转向)
  • 《暮光之城》——如果那真的是你,就请你再勇敢一点、再直接一点,因为我早已经不可救药的爱上你了。你是吸血鬼也罢,你是致命危险也罢,你是什么,我都无所谓。
  • 家庭必备,轻、快、好用的WIN10自带虚拟机
  • 基于mybatis-jsp-bootstrap-servlet-mysql-maven的Javaweb课程设计--刷题后台管理系统(考试题目管理系统)
  • dedeCMS采集规则各大CMS采集规则通用
  • 滚动公告栏代码
  • 团队博客介绍
  • java面试题之OAuth 2.0是什么,四种支持的方法
  • windows xp 安装图解
  • Windows配置DHCP与IP管理
  • 【科研之路】室内定位入门之基于定位原理的分类概述
  • 详细74系列IC功能说明
  • 消息队列常见问题总结
  • Window OS-拾贝
  • 【剑侠情缘服务端】武侠题材角色扮演类手游源码+手工外网端+安卓APP+视频教程
  • 资深开发者J2ME平台开发漫谈