快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
getClientId (currentInstance), "id");      writer.writeAttribute("name", fieldComponent.getClientId (currentInstance), "name");      if(fieldComponent.getValue()!=null)        writer.writeAttribute("value", fieldComponent.getValue().toString (), "value");      writer.endElement("input");    } }

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

时间:2011-04-11 IBM Rick Hightower

编码和解码

正如前面提到的,渲染器做的主要工作就是解码输入和编码输出。我先从解码开始,因为 它是最容易的。 FieldRenderer 的 decode 方法如下所示:

@Override public void decode(FacesContext context, UIComponent component) {     /* Grab the request map from the external context */    Map requestMap = context.getExternalContext().getRequestParameterMap ();     /* Get client ID, use client ID to grab value from parameters */    String clientId = component.getClientId(context);    String value = (String) requestMap.get(clientId);    FieldComponent fieldComponent = (FieldComponent)component;     /* Set the submitted value */    ((UIInput)component).setSubmittedValue(value); }

Label 组件不需要进行解码,因为它是一个 UIOutput 组件。Field 组件是一个 UIInput 组件,这意味着它接受输入,所以 必须 进行解码。decode 方法可以从会话、cookie、头、 请求等处读取值。在大多数请问下,decode 方法只是像上面那样从请求参数读取值。Field 渲染器的 decode 方法从组件得到 clientId,以标识要查找的请求参数。给定组件容器的路 径,clientId 被计算成为组件的全限定名称。而且,因为示例组件在表单中(是个容器), 所以它的 clientid 应当是 nameOfForm:nameOfComponent 这样的,或者是示例中的 cdForm:artist、cdForm:price、cdForm:title。decode 方法的最后一步是把提交的值保存 到组件(稍后会转换并验证它,请参阅 参考资料 获取更多关于验证和转换的内容)。

编码方法没什么惊讶的。它们与 Label 组件中看到的类似。第一个方法 encodeBegin, 委托给三个帮助器方法 encodeLabel、encodeInput 和 encodeMessage,如下所示:

@Override public void encodeBegin(FacesContext context, UIComponent component)     throws IOException {    FieldComponent fieldComponent = (FieldComponent) component;    ResponseWriter writer = context.getResponseWriter();    encodeLabel(writer,fieldComponent);    encodeInput(writer,fieldComponent);    encodeMessage(context, writer, fieldComponent);    writer.flush(); }

encodeLabel 方法负责在出错的时候,把标签的颜色改成红色(或者在样式表中指定的其 他什么颜色),并用星号 (*) 标出必需的字段,如下所示:

private void encodeLabel(ResponseWriter writer, FieldComponent fieldComponent) throws IOException{    writer.startElement("label", fieldComponent);    if (fieldComponent.isError()) {       String errorStyleClass = (String) fieldComponent.getAttributes ().get("errorStyleClass");       String errorStyle = (String) fieldComponent.getAttributes().get ("errorStyle");       writer.writeAttribute("style", errorStyle, "style");       writer.writeAttribute("cla

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