`
yingfang05
  • 浏览: 122697 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

用Java Server Faces建立交互式WEB站点

    博客分类:
  • jsf
阅读更多
步骤1:开发组件的Java类
   组件类将负责管理代表组件状态的属性,因此,我们必须根据组件的行为(如输入组件或输出组件),为组件选择适当的基类。
   在列表A中描述的组件扩展了javax.faces.component.UIOutput,以显示指向某个样式表文件的URL,或内联式样式表的内容。
  列表A
  import javax.faces.component.*;
  public class CSSComponent extends UIOutput {
  private Boolean link;
  public String getFamily() {
  return "faces.CSSFamily";
  }
  public boolean isLink() {
  if (link != null)
  return link.booleanValue();
  ValueBinding vb = getValueBinding("link");
  if (vb != null) {
  Boolean bvb = (Boolean) vb.getValue(FacesContext.
  getCurrentInstance());
  if (bvb != null)
  return bvb.booleanValue();
  }
  return false;
  }
  public void setLink(boolean link) {
  this.link = new Boolean(link);
  }
  public Object saveState(FacesContext context) {
  return new Object[] { super.saveState(context), link };
  }
  public void restoreState(FacesContext context,
  Object stateObj) {
  Object[] state = (Object[]) stateObj;
  super.restoreState(context, state[0]);
  link = (Boolean) state[1];
  }
  }
   代码中“关联”的属性规定了值的类型:要么是一个URL,要么是内联样式。该组件还必须能够在向服务器发送请求期间,使用经过JSF架构处理过的对象,来存储并恢复自己的状态。JSF架构自动调用saveState和restoreState方法,我们可以在组件中实现这两种方法来达到这一目标。
  步骤2:编写渲染器
   渲染程序有两个作用。首先,渲染程序负责发送适当的HTML程序段,该程序段能在客户端中渲染组件。通常情况下,这个HTML程序段由一些适于渲染整个网络浏览器的HTML标签组成,这个渲染阶段还能发送增强客户端交互性的JavaScript代码。
   渲染程序的第二个作用是对来自客户端的数据进行解码,从而对服务器端的组件状态进行更新(比如用户在文本字段输入的文本)。标准渲染程序软件包具有强制 性,但也可以提供其他渲染程序软件包,用于提供其他的客户端表示方法或SVG之类的语言。
   通过检验组件的链接属性,在列表2中实现的渲染程序将选择在HTML页面中发送的CSS样式类别。
  列表B
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  import javax.faces.render.Renderer;
  public class CSSRenderer extends Renderer {
  public void encodeEnd(FacesContext context,
  UIComponent component)
  throws IOException {
  super.encodeEnd(context, component);
  if (component instanceof CSSComponent) {
  CSSComponent cssComponent =
  (CSSComponent) component;
  String css = (String)cssComponent.getValue();
  boolean isLink = cssComponent.isLink();
  if (css != null)
  if (isLink)
  context.getResponseWriter().write("<link type='text/
  css' rel='stylesheet' href='" + css + "'/>");
  else
  context.getResponseWriter().write("<style>\n" + css
  + "\n<style/>\n");
  }
  }
  }
  步骤3:编写标签类
   同样,JSF架构提供了用于扩展的基类,来编写与组件相关的标签。该标签类将负责:
   定义将在faces-config.xml文件中应用的组件类型和渲染类型,我们将在下一部分具体介绍这个XML文件。
   创建JSF组件(由JSF架构来处理)并传递JSF标签中所包含的属性来初始化组件。
   在列表C中的标签提供了setter和getter来管理链接和值的属性。
  列表C
  import javax.faces.Webapp.UIComponentTag;
  public class CSSTag
  extends UIComponentTag {
  private String value;
  private String link;
  public String getComponentType() {
  return "faces.CSSComponent";
  }
  public String getRendererType() {
  return "HTML.LinkOrInlineRenderer";
  }
  protected void setProperties(UIComponent component)
  {
  super.setProperties(component);
  Application app = getFacesContext().getApplication();
  if (value != null)
  if (isValueReference(value))
  component.setValueBinding("value",
  app.createValueBinding(value));
  else
  component.getAttributes().put("value", value);
  if (link != null)
  if (isValueReference(link))
  component.setValueBinding("link",
  app.createValueBinding(link));
  else
  component.getAttributes().put("link",
  new Boolean(link));
  }
  public String getLink() {
  return link;
  }
  public void setLink(String link) {
  this.link = link;
  }
  public String getValue() {
  return value;
  }
  public void setValue(String value) {
  this.value = value;
  }
  }
   组件一旦创建,便会调用setPropertie方法,对标签属性进行初始化。每个标签属性要么是文字值,要么是bean属性的一个绑定。
  步骤4:编写一个标签库定义(TLD)
   TLD是一个XML文件,它通过将标签名与相应的Java类相关联来描述标签。TLD还描述了标签所允许的属性。
   在列表D中的这个TLD定义了一个名为“css”的标签,该标签被绑定到CSSTag类。它还声明了链接和值标签的属性。
  列表D
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/Web-jsptaglibrary_1_
  2.dtd">
  <taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>custom</short-name>
  <uri>http://www.ilog.com/jviews/tlds/css.tld</uri>
  <description>This tag library contains a tag for a sample custom JSF Component.</description>
  <tag>
  <name>css</name>
  <tag-class>path.to.CSSTag</tag-class>
  <description>A component that displays the style inline or a link a to a css fi le</description>
  <attribute>
  <name>id</name>
  <required>false</required>
  <rtexprvalue>false</rtexprvalue>
  <type>java.lang.String</type>
  <description>The id of this component.</description>
  </attribute>
  <attribute>
  <name>binding</name>
  <required>false</required>
  <rtexprvalue>false</rtexprvalue>
  <type>java.lang.String</type>
  <description>The value binding expression linking this component to a
  property in a backing bean. If this attribute is set, the tag does not
  create the component itself but retrieves it from the bean property.
  This attribute must be a value binding.</description>
  </attribute>
  <attribute>
  <name>value</name>
  <required>true</required>
  <rtexprvalue>false</rtexprvalue>
  <type>java.lang.String</type>
  <description>The inline css text or the url to the css fi le to link.</description>
  </attribute>
  <attribute>
  <name>link</name>
  <required>false</required>
  <rtexprvalue>false</rtexprvalue>
  <type>java.lang.String</type>
  <description>Whether the value is a link or the inline style.</description>
  </attribute>
  </tag>
  </taglib>
  步骤5:JSF配置文件
   为了将一个JSF组件集成到架构中,必须提供一个名为faces-config.xml的配置文件。这个文件将用于JSP自定义标 签处理器的组件类型和渲染器类型与对应的Java类关联起来。它还能描述与每个组件一同使用的渲染器。
   列表E定义了faces.CSSFamily组件家族。
  列表E
  <!DOCTYPE faces-confi g PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Confi g 1.0//EN"
  "http://java.sun.com/dtd/Web-facesconfi g_1_0.dtd">
  <faces-confi g>
  <component>
  <component-type>faces.CSSComponent</component-type>
  <component-class>path.to.CSSComponent</component-class>
  <component-extension>
  <component-family>faces.CSSFamily</component-family>
  <renderer-type>HTML.LinkOrInlineRenderer</renderer-type>
  </component-extension>
  </component>
  <render-kit>
  <renderer>
  <component-family>faces.CSSFamily</component-family>
  <renderer-type> HTML.LinkOrInlineRenderer </renderer-type>
  <renderer-class>path.to.CSSRenderer</renderer-class>
  </renderer>
  </render-kit>
  </faces-confi g>
   在这个例子中,该家族由faces.CSSComponent类型的单一组件组成,该类型是与CSSComponent类绑定在一起的。最后, 由CSSRenderer类实现的HTML.LinkOrInlineRenderer类型的渲染器与faces.CSSFamily家族相关联。
   开发者还可以通过提供额外的信息将组件整合到支持JSF的集成开发环境(IDE)中,以Sun Creator IDE为例,必须提供一个名为sun-faces-config.xml的XML配置文件,这个配置文件描述了应当显示给IDE的组件属性和一些组件的设计信息。关于Sun Studio Creator的更详细的使用说明和构建自定义JSF组件的信息,我强烈推荐SUN的开发者网站。
分享到:
评论

相关推荐

    ArcGIS server 9.3培训

    在【描述】中提到,ArcGIS Server基于JSF(JavaServer Faces)平台进行开发,这是一个用于构建用户界面的Java标准技术,提供了构建富互联网应用程序(RIA)的组件模型。JSF与ArcGIS Server的结合使得开发者能够创建...

    JAVA 开发opencart简洁主题simplecart sot12.zip

    1. **Java Web开发**:主题的Java开发背景意味着它可能使用了Spring、Struts或JavaServer Faces (JSF)等Java Web框架,这些框架能够处理HTTP请求,提供服务端逻辑,并与数据库进行交互。 2. **OpenCart API集成**:...

    seam 的eclipse工程例子3

    JavaServer Faces (JSF) 是一种用于构建Web用户界面的MVC(模型-视图-控制器)框架。它提供了一种声明式的方式来管理组件和事件处理,减轻了开发者的工作负担。而Seam则扩展了JSF的功能,提供了更强大的组件系统、更...

    java-eticaret

    【Java电子商务】是一个基于Java技术实现的电子商务平台,利用了Java服务器页面(JSP)、JavaServer Faces(JSF)和模型-视图-控制器(MVC)设计模式。这一项目展示了如何在实际环境中构建一个完整的在线购物系统,...

    深入浅出JBoss Seam

    Seam还支持AJAX(Asynchronous JavaScript and XML),允许创建具有实时反馈的交互式Web应用。 此外,JBoss Seam还集成了EJB 3.0,使得企业级服务的开发变得更加便捷。EJB是Java EE平台的一部分,提供了诸如事务...

    Maven的Primeface Project Prototype

    而Primefaces则是一个流行的JavaServer Faces (JSF) 框架的UI组件库,为Web应用程序提供了丰富的用户界面。本文将深入探讨如何使用Maven创建一个基于Primefaces的项目原型,以及这两个工具在实际开发中的应用。 ** ...

    oracle ADF 开发指南

    - 介绍了如何使用ADF业务组件、JavaServer Faces(JSF)及ADF Faces(Oracle提供的用于构建基于Web的电子商务套件的组件)来开发企业应用程序。 #### 四、适用场景 - 对于高级的J2EE开发者来说,如果他们倾向于使用...

    primefaces指南

    **PrimeFaces**是一款基于JavaServer Faces(JSF)的开源用户界面组件库。它提供了丰富的组件集合,旨在简化Web应用开发流程,并提高开发效率。PrimeFaces不仅支持最新的HTML5标准,还包含了大量实用的功能特性,如...

    ICEfaces 2 for eclipse

    ICEfaces 2是一款高度先进的JavaServer Faces (JSF) 框架,专为构建富互联网应用程序(RIA)而设计。这款框架的核心在于其与Eclipse IDE的无缝集成,为开发者提供了一个高效的工作环境,使得在JSF 2标准基础上开发用户...

    xsdTransformer for eclipse-开源

    此外,项目计划扩展此功能,将XML Schemata转换为其他主流技术,如JavaServer Faces (JSF)、XUL(XUL是Mozilla的用户界面标记语言)以及Hibernate(一个流行的Java持久化框架)。 1. **XML Schema(XSD)与XForms的...

Global site tag (gtag.js) - Google Analytics