快速业务通道

怀疑论者的JSF: JSF组件开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
= (Object[])state;      super.restoreState(context, values[0]);      label = (String)values[1];    }

可以注意到,我使用的是 JDK 1.5。我对编译器进行了设置,所以我必须指定 override 注释,以便指明哪些方法要覆盖基类的方法。这样做可以更容易地标识出 JSF 的钩子在哪。

创建组件的最后一步是用 faces-config.xml 登记它,如下所示:

<faces-config>   <component>     <component-type>simple.Label</component-type>     <component-class>      arcmind.simple.LabelComponent     </component-class>   </component> ...

第 2 步:定义渲染器

下面要做的是内联地定义渲染器的功能。稍后我会介绍如何创建独立的渲染器。现在,先 从编码 Label 组件的输出、显示 label 开始,如清单 3 所示:

清单 3. 编码组件的输出

public class LabelComponent extends UIOutput{    ...    public void encodeBegin(FacesContext context)            throws IOException {      ResponseWriter writer =        context.getResponseWriter();      writer.startElement("label", this);              writer.write(label);              writer.endElement("label");              writer.flush();    }    ... }

注意,响应写入器(javax.faces.context.ResponseWriter)可以容易地处理 HTML 这样 的标记语言。清单 3 的代码输出 <label> 元素体内的 label 的值。

下面显示的 family 属性用来把 Label 组件与渲染器关联。虽然目前 Label 组件还不需 要这个属性(因为还没有独立的渲染器),但是在这篇文章后面,在介绍如何创建独立渲染 器的时候,会需要它。

public class LabelComponent extends UIOutput{    ...    public String getFamily(){      return "simple.Label";    }    ... }

怀疑论者的JSF: JSF组件开发(5)

时间:2011-04-11 IBM Rick Hightower

插曲:研究 JSF-RI

如果正在使用来自 Sun Microsystems 的 JSF 参考实现(不是 MyFaces 实现),那么就 不得不在组件创建代码中添加下面一段:

public void encodeEnd(FacesContext context)        throws IOException {    return; } public void decode(FacesContext context) {    return; }

Sun 的 JSF RI 期望,在组件没有渲染器的时候,渲染器会发送一个空指针异常。 MyFaces 实现不要求处理这个需求,但是在代码中包含以上方法依然是个好主意,这样组件 既可以在 MyFaces 环境中工作也可以在 JSF RI 环境中工作了。

第 3 步:创建定制标记

JSF 组件不是天生绑定到 JSP 上的。要连接起 JSP 世界和 JSF 世界,需要能够返回组 件类型的定制标记(然后在 faces-context 文件中登记)和渲染器,如图 3 所示。

图 3. 连接 JSF 和 JSP

怀疑论者的JSF: JSF组件开发 - 编程入门网

注意,由于没有独立的渲染器,所以可以给 getRendererType() 返回 null 值。还请注 意,必须已经把 label 属性的值从定制标记设置到组件上,如下所示:

[LabelTag.java] public class LabelTag extends UIComponentTag { … protected void setProperties(UIComponent component) {    /* you have to call the super class */    super.setProperties(component);    ((LabelComponent)component).setLabel(label); }

记住,Tag 设置从 JSP 到 Label 组件的绑定,如图 4 所示。

图 4. 绑定 JSF 和 JSP

怀疑论者的JSF: JSF组件开发 - 编程入门网

怀疑论者的JSF: JSF组件开发(6)

时间:2011-04-11 IBM Rick Hightower

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号