UIComponent实现了StateHolder接口,StateHolder接口表示组件具有了状态。
StateHolder接口中常用到saveState,restoreState两个方法,在开发自定义组件的时候,需要实现它们,具体使用上经常是把 你的组件中全局变量进行状态化,就是在Object[]中定义它们,jsf在恢复和保存两个阶段分别调用组件的这两个方法,把页面的状态数据恢复在 Object[],把组件的Object[]数据渲染到页面。isTransient,setTransient方法表式,你的组件是否想状态化。

UIComponent组件主要api
1.public abstract java.util.Map getAttributes()  该方法会获得该组件的所有属性值

2. public abstract javax.faces.el.ValueBinding getValueBinding(java.lang.String name) 该方法会从组件的值绑定集合表中获取对应的值绑定对象,值绑定对象(ValueBinding )的目的是使用EL表达式解析你绑定的模型值,例如页面有个(#use.name),那么值绑定就会解析这个字符串,通过变量解析获取User对象,再用 值解析获取name值。

3.public abstract java.lang.String getClientId(javax.faces.context.FacesContext context) 主要是在UIViewRoot组件中生成组件在页面的映射Id,如果你为组件定义了一个id,那么他会基于这个id生成一个具有组件层次的客户端Id,使 用':'来分隔,如果没有为组件定义id,那么会动态生成一个id,例如会在页面渲染结果看到'form1:input1'这样的Id,就是告诉你一个 Input组件的id是'input',它在id是'form1'的form组件中。clientId常常在jsf内部对组件用来整理,定位。

4.public abstract java.lang.String getFamily() 告诉你这个组件属于那个家族的,用的不多。主要是内部创建渲染类使用。

5. public abstract java.lang.String getId() 这个Id就是页面上你指定的组件Id,它可以让你方便的查找组件树上的组件,最好给你的页面组件都设定一个id,在服务端开发有时候会用到,如果没有设 定,jsf会自动生成一个唯一的id,如果自定义id在组件中有冲突,那么jsf会抛出id冲突异常。

6.public abstract javax.faces.component.UIComponent getParent() 得到该组件的父组件,注意:html标记不会成为一个组件。

7. public abstract boolean isRendered() 如果该组件这个方法设定为false,那么该组件以及它的子组件都会停止解码,验证,值更新,渲染等操作

8. public abstract java.lang.String getRendererType()  指定了该组件使用哪个渲染类进行渲染,这就是组件与渲染分离,并且互相可以复用的机制。

9. public abstract boolean getRendersChildren();  如果组件的此方法设定为真,那么jsf将继续寻找它的子组件进行渲染。否者渲染只渲染到当前组件。

10. public abstract java.util.List getChildren(); 获得该组件的直属子组件列表

11. public abstract int getChildCount() 获得获得该组件的直属子组件列表数

12.public abstract javax.faces.component.UIComponent findComponent(java.lang.String expr) 寻找该组件的子组件,通过页面上指定的组件Id,在它的父组件的findComponent去查找这个组件,一般用于自定义组件开发上,例如:jsf消息 渲染的时候就是通过findComponent方法去寻找for属性定义的组件。

13.public abstract java.util.Map getFacets() 得到该组件的所有facet类型的组件,facet组件主要作用:一个功能强大的组件中会有很多增强功能,这些增强功能可以定义成多个小的facet组 件,这样可以从组件的主功能中分解开,降低组件内部功能的耦合性,同时也可以做为组件的插件机制来扩展。

14.public abstract java.util.Iterator getFacetsAndChildren() 获取自己所以的直属子组件和facet组件,常用在子组件查找操作上,例如jsf核心机制中,遍历组件增加事件时就要递归使用此方法。

15.    public abstract void broadcast(javax.faces.event.FacesEvent event) 对于jsf生命周期的几个阶段都会用到递归遍历组件的事件,使用的就是这个方法,常用在内部机制上。标准的观察者模式。

16.    public abstract void decode(javax.faces.context.FacesContext context) jsf声明周期中的解码部分就是调用此方法,主要用在应用请求值阶段,通过递归遍历,每一个组件会在这个阶段操作request等容器对象来实现并隐藏 request请求的表现逻辑,并封装成事件交给组件的事件列表,由后面的阶段来处理。需要注意的是很可能此方法会把工作委托给渲染类的decode上, 所以jsf的渲染机制不仅仅是简单的输出html等展现标记,还用来封装和隐藏容器内的通信机制,让容器内对象从我们眼前消失!

17.

public abstract void encodeBegin(javax.faces.context.FacesContext context)
            throws java.io.IOException;
public abstract void encodeChildren(javax.faces.context.FacesContext context)
            throws java.io.IOException;
public abstract void encodeEnd(javax.faces.context.FacesContext context)
            throws java.io.IOException;
组件渲染阶段需要经历的步骤,渲染机制是一个复杂的过程,原理上是把tag标记渲染的工作委托给了servlet之上来处理,jsf 的tag标记只作为组件,视图之间的映射之用。这三个阶段更明确了渲染成视图标记这样一个工作,同样可以委托给渲染类去做。

18.protected abstract void addFacesListener(javax.faces.event.FacesListener listener) 为组件增加监听,标准的观察者模式。

19.protected abstract javax.faces.event.FacesListener[] getFacesListeners(java.lang.Class clazz) 得到组件的监听列表,监听器在组件的事件列表遍历时会被调用,clazz参数是用来区分不同的监听器,目前常用 ActionListener.class,ValueChangeListener.class

20.protected abstract void removeFacesListener(javax.faces.event.FacesListener listener);从组件的监听列表中删除不需要的监听器。

21.public abstract void queueEvent(javax.faces.event.FacesEvent event) 把新创建的事件增加到组件的事件队列,此方法常常用在应用请求值阶段,每个组件会根据条件创建自己的事件,加入到事件列表,所有事件会全局的放入 UIViewRoot组件中,UIViewRoot组件是jsf各个阶段对组件树进行递归遍历处理的启动点。

22.

public abstract void proce***estoreState(javax.faces.context.FacesContext context,
                                             java.lang.Object state);
public abstract void processDecodes(javax.faces.context.FacesContext context);
public abstract void processValidators(javax.faces.context.FacesContext context);
public abstract void processUpdates(javax.faces.context.FacesContext context);
public abstract java.lang.Object processSaveState(javax.faces.context.FacesContext context);

jsf生命周期中组件需要处理的五个重要阶段:恢复状态,解码,验证,更新,保持状态(另外包括调用应用,渲染),开发自定义组件,需要特别关注这些方面,渲染阶段由组件的编码方法实现,调用应用阶段则是actionListener监听器集合的处理期。

23. protected abstract javax.faces.context.FacesContext getFacesContext() 获取jsf上下文环境,FacesContext 是一个线程安全模型,在设计上接近pojo,所以在jsf环境对FacesContext的调用得到了简化,但是jsf整体的编程规则上更希望你能把 FacesContext 作为命令参数传递给各个实现细节,以保证上下文的真实性,这一点在开发自定义组件上要注意!
24. protected abstract javax.faces.render.Renderer getRenderer(javax.faces.context.FacesContext context) 获取当前组件的渲染类。

转载于:https://blog.51cto.com/pz0513/110646

jsf UIComponent组件接口详细注释说明(jsf1.1规范)相关推荐

  1. 【精讲】vue组件开发基础、多层嵌套(内含详细注释)、vuecomponent构造函数

    目录 vue组件开发基础 多层嵌套(内含详细注释) vuecomponent构造函数 第一部分:vue组件开发基础 <!--         vue中使用组件的三大步骤:         一 , ...

  2. Abp框架从零开始(基于.Net Core 2.2) 小记(一) 为Swagger接口页添加详细注释

    Swagger接口页添加接口注释和参数注释 从Abp官网创建完项目之后,启动之后,Swagger的接口说明页,默认是没有接口说明的,这样是很不友好的,也不利于接口调用者的使用,所以,我们要实现Swag ...

  3. eclipse让实现类也添加上接口的注释_您的Spring框架注释指南,请注意查收

    这是关于几乎所有Spring Framework注释的简化,包括Core,Spring Cloud,Spring MVC,Spring REST和Spring Boot. 在本文中,我们将介绍Spri ...

  4. Web API系列(三):添加接口详细说明及测试

    1.引言 前边两篇博客介绍了Web API的基本框架以及路由配置,这篇博客主要解决在前后端分离项目中,为前端人员提供详细接口说明的问题,主要是通过修改WebApi HelpPage相关代码和添加Web ...

  5. jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

    jsf tree组件 这篇博客文章起源于一个大型Web应用程序中的性能问题. 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码. 奇怪,因为在客户端有很多改进的空间. 我会说,甚 ...

  6. java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

    四.如何对注释进行注释 这一节的题目读起来虽然有些绕口,但它所蕴涵的知识却对设计更强大的java程序有很大帮助. 在上一节讨论了自定义注释,由此我们可知注释在J2SE5.0中也和类.接口一样.是程序中 ...

  7. jsf tree组件_JSF表单组件示例教程

    jsf tree组件 JSF Form component is a collection of fields along with the data and submit functionality ...

  8. jsf tree组件_JSF UI组件标签属性示例教程

    jsf tree组件 JSF provides a wide variety of ui component tags along with a long range of attributes. T ...

  9. WinAPI入门: 第一个标准Win32窗口程序 [改进详细注释版]

    WinAPI入门: 第一个标准Win32窗口程序 下载链接: 若想立即看到本程序的运行结果,可点击EXE文件的免费下载链接; HelloWin_v1.sfx.exe;–带语音和背景音乐; 相关链接: ...

最新文章

  1. Linux内核情景分析之异常访问,用户堆栈的扩展
  2. android 51 有序广播
  3. P4124 [CQOI2016]手机号码
  4. 原生js实现轮播图实例教程
  5. Python面向对象案例汇总
  6. matlab 常用m文件,MATLAB基础课程 第三章 M文件知识(4)
  7. 使用 python 操作 redis
  8. leetcode 368. 最大整除子集(dp)
  9. Bootstrap系列 -- 36. 向上弹起的下拉菜单
  10. 在JS中使用Ajax
  11. Cainteoir Text-to-Speech 0.8 发布
  12. kubernetes-dashboard部署
  13. Multi-level learning based memetic algorithm for community detection笔记
  14. win11修改mac地址的方法
  15. LTE学习笔记四:OFDM
  16. 免安装版(解压缩版)MySQL安装
  17. 一个优秀IT专家的成长历程---献给所有的颓废或即将颓废的人们
  18. 移动端SEO的一些疑问
  19. 定义主函数main()
  20. LC激光雷达qy调研

热门文章

  1. 爱奇艺全国高校算法大赛初赛A
  2. linux 子shell
  3. 同样的c代码,为何在windows下和linux下执行结果不一样?
  4. 机器视觉核心算法——图像预处理
  5. error: Program received signal SIGSEGV, Segmentation fault. (Codeblocks, C++)(2)
  6. Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
  7. 关于Runtime.getRuntime().exec()运行python代码失败的问题
  8. 基于遗传算法自动化集装箱码头多载AGV调度(一)—模型搭建
  9. mysql中的day(0_MySQL代码执行0-day漏洞 可本地提权
  10. php常用标签,PHP 过滤常用标签的正则表达式