快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ss", errorStyleClass, "class");    }    writer.write("" + fieldComponent.getLabel());    if (fieldComponent.isRequired()) {       writer.write("*");    }    writer.endElement("label"); }

首先,encodeLabel 方法检查是否有错误,如果有就输出 errorStyle 和 errorStyleClass(更好的版本是只有在它们不为空的时候才输出 —— 但是我把它留给您做 练习!)。然后帮助器方法会检查组件是不是必需的字段,如果是,就输出星号。 encodeMessages 和 encodeInput 方法做的就是这件事,即输出出错消息并为 Field 组件生 成 HTML 输入的文本字段。

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

时间:2011-04-11 IBM Rick Hightower

注意,神秘方法!

您可能已经注意到,有一个方法我还没有介绍。这个方法就是这个类中的“黑马”方法。 如果您阅读 Renderer(所有渲染器都要扩展的抽象类)的 javadoc,您可能会感觉到这样的 方法是不需要的,现有的就足够了:这就是我最开始时想的。但是,您和我一样,都错了!

实际上,基类 Renderer 并不 自动调用 Renderer 子类的相关转换器 —— 即使 Renderer 的 javadoc 和 JSF 规范建议它这样做,它也没做。MyFaces 和 JSF RI 拥有为它 们的渲染器执行这个魔术的类(特定于它们的实现),但是在核心 JSF API 中并没有涉及这 项功能。

相反,需要使用方法 getConvertedValues 锁定相关的转换器并调用它。清单 9 显示的 方法根据值绑定的类型找到正确的转换器:

清单 9. getConvertedValues 方法

@Override public Object getConvertedValue(FacesContext facesContext,   UIComponent component, Object submittedValue) throws ConverterException {    //Try to find out by value binding    ValueBinding valueBinding = component.getValueBinding("value");    if (valueBinding == null) return null;    Class valueType = valueBinding.getType(facesContext);    if (valueType == null) return null;    if (String.class.equals(valueType)) return submittedValue;    if (Object.class.equals(valueType)) return submittedValue;    Converter converter = ((UIInput) component).getConverter();    converter = facesContext.getApplication().createConverter(valueType);    if (converter != null ) {       return converter.getAsObject(facesContext, component, (String) submittedValue);    }else {       return submittedValue;    } }

清单 9 的代码添加了 Render javadoc 和 JSF 规范都让您相信应当是自动执行的功能, 而实际上并不是。另一方面,请注意如果没有 独立的 Renderer,就不需要 以上 (getConvertedValues)方法。UIComponentBase 类(Field 组件的超类)在直接渲染器的 情况下提供了这个功能。请接受我的建议,只在特别想尝试或者在编写商业框架的时候,才 考虑采用渲染器。在其他情况下,它们不值得额外的付出。

如果想知道如何把组件和渲染器关联,那么只要看看图 6 即可。

图 6. 把渲染器映射到组件

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

定制标记有两个方法,分别返回组件类型和渲染器类型。这些方法用于查找配置在 faces-config.xml 中的正确的渲染器和组件。请注意(虽然图中没有)组件必须返回正确的 family 类型。

结束语

通过这些内容,您已经切实地了解了 JSF 组件开发的核心。当然,在这个领域还有许多 其他主题需要涉及 —— 包括发出组件事件、国际化组件、创建 UICommand 样式的组件,以 及更多。请

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号