- 浏览: 122728 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
sunxiangfei91:
引用[*][url][/url]
Spring使用MimeMessageHelper -
lhb3015:
lz, Coder 这个类的代码呢??
Java RSA算法加密 -
b_lee:
顶顶顶 加两个字,再顶
Facelets是JSF更好的外衣 -
zhuqing08:
楼主 Coder 这个类的代码呢?
Java RSA算法加密 -
evajhhot:
貌似不行 有异常
BlazeDS 与Spring集成指南之一
步骤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的开发者网站。
组件类将负责管理代表组件状态的属性,因此,我们必须根据组件的行为(如输入组件或输出组件),为组件选择适当的基类。
在列表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的开发者网站。
发表评论
-
Seam管理的事务
2010-01-28 15:22 1197EJB会话Bean有声明式事务 ... -
配置Seam组件之二
2010-01-16 20:30 943如果你有大量的组件需要在XML中进行配置,那么就很有必要将 c ... -
配置Seam组件之一
2010-01-16 20:29 978Seam所崇尚的哲学是XML配 ... -
Seam上下文
2009-12-25 15:23 1019Seam上下文是由框架创建 ... -
JSF和Spring的集成之二
2009-12-23 17:55 944使用框架 1 介绍 这个 ... -
JSF和Spring的集成之一
2009-12-19 20:45 767JSF和Spring集成的资料比较少,原理是获得彼此的上下文引 ... -
Seam配置和Seam应用程序打包之二
2009-11-28 09:15 1293将Seam与你的EJB容器集成 我们需要将 SeamInter ... -
Seam配置和Seam应用程序打包之一
2009-11-20 22:25 1139Seam基本配置 首先,让我们看看每当将Seam和JSF一起使 ... -
集成JSF与BEEHIVE PAGE FLOW之二
2009-10-10 21:54 1034从后台bean访问当前页面 ... -
集成JSF与BEEHIVE PAGE FLOW之一
2009-10-07 23:13 996JSF对通过关联组件和事件来构建页面而说是非常棒的,但是,与所 ... -
借助Ajax自动保存JSF表单之二
2009-09-19 12:53 1215创建和发送 Ajax 请求 submitFormData() ... -
借助 Ajax 自动保存 JSF 表单之一
2009-09-13 11:00 1098在客户端获取表单数据 本节将给出一个 JSF 表单,其数据通 ... -
基于AJAX和JSF打造丰富的互联网组件之Weblets篇
2009-09-04 15:08 938为了在JSF开发中联合使用AJAX和Mozilla XUL技术 ... -
JSF 2.0的一个AJAX例子
2009-08-21 10:49 2419首先创建一个ManagedBean用来记录我们提交按钮的数量。 ... -
JSF2.0的页面模版化
2009-08-15 10:28 1732本篇介绍可以与Tapestry相媲美的页面模版化定义。 我 ... -
JSF2.0中自定义组件模型例子
2009-08-11 07:59 1333在本篇介绍中,我们开始接触JSF2.0纳为标准的最重要的特性之 ... -
Java Server Faces 2.0重要新功能以及相关改进简介
2009-08-01 10:00 1086JSF 2.0的最终规范也已经发布了有近一个月了,在近期试 ... -
JSF2: Ajax事件和错误
2009-07-09 09:13 1093JSF2的Ajax支持包含一个 ... -
Facelets是JSF更好的外衣
2009-06-16 15:53 1578是由 Sun 公司在 dev.java.net 上的一个开源项 ... -
JSF里自订验证器
2009-06-06 16:52 931您可以自订自己的验证器,所需要的是实作javax.faces. ...
相关推荐
在【描述】中提到,ArcGIS Server基于JSF(JavaServer Faces)平台进行开发,这是一个用于构建用户界面的Java标准技术,提供了构建富互联网应用程序(RIA)的组件模型。JSF与ArcGIS Server的结合使得开发者能够创建...
1. **Java Web开发**:主题的Java开发背景意味着它可能使用了Spring、Struts或JavaServer Faces (JSF)等Java Web框架,这些框架能够处理HTTP请求,提供服务端逻辑,并与数据库进行交互。 2. **OpenCart API集成**:...
JavaServer Faces (JSF) 是一种用于构建Web用户界面的MVC(模型-视图-控制器)框架。它提供了一种声明式的方式来管理组件和事件处理,减轻了开发者的工作负担。而Seam则扩展了JSF的功能,提供了更强大的组件系统、更...
【Java电子商务】是一个基于Java技术实现的电子商务平台,利用了Java服务器页面(JSP)、JavaServer Faces(JSF)和模型-视图-控制器(MVC)设计模式。这一项目展示了如何在实际环境中构建一个完整的在线购物系统,...
Seam还支持AJAX(Asynchronous JavaScript and XML),允许创建具有实时反馈的交互式Web应用。 此外,JBoss Seam还集成了EJB 3.0,使得企业级服务的开发变得更加便捷。EJB是Java EE平台的一部分,提供了诸如事务...
而Primefaces则是一个流行的JavaServer Faces (JSF) 框架的UI组件库,为Web应用程序提供了丰富的用户界面。本文将深入探讨如何使用Maven创建一个基于Primefaces的项目原型,以及这两个工具在实际开发中的应用。 ** ...
- 介绍了如何使用ADF业务组件、JavaServer Faces(JSF)及ADF Faces(Oracle提供的用于构建基于Web的电子商务套件的组件)来开发企业应用程序。 #### 四、适用场景 - 对于高级的J2EE开发者来说,如果他们倾向于使用...
**PrimeFaces**是一款基于JavaServer Faces(JSF)的开源用户界面组件库。它提供了丰富的组件集合,旨在简化Web应用开发流程,并提高开发效率。PrimeFaces不仅支持最新的HTML5标准,还包含了大量实用的功能特性,如...
ICEfaces 2是一款高度先进的JavaServer Faces (JSF) 框架,专为构建富互联网应用程序(RIA)而设计。这款框架的核心在于其与Eclipse IDE的无缝集成,为开发者提供了一个高效的工作环境,使得在JSF 2标准基础上开发用户...
此外,项目计划扩展此功能,将XML Schemata转换为其他主流技术,如JavaServer Faces (JSF)、XUL(XUL是Mozilla的用户界面标记语言)以及Hibernate(一个流行的Java持久化框架)。 1. **XML Schema(XSD)与XForms的...