pout
发表于http://www.leefn.com 时间2009-07-10 12:42
在本篇介绍中,我们开始接触JSF2.0纳为标准的最重要的特性之一,facelets组件模型,整个组件模型的特性是很多的,我在本系列中只能做简单的介绍,并试图用比较简单的例子为大家揭示JSF2.0带给我们独特而快捷的开发体验。
从本篇开始,我采用同一个例子,给大家依次揭示JSF2.0的组件与Ajax模型等重要内容。另外有任何问题,请在JSF2.0组中提出来,大家一起探讨JSF2.0的开发。
在本篇中,主要揭示自定义组件的过程,在过程中,我还会给大家演示一下JSF2.0中其他的一些特性。现在自定义组件非常简单,下面就用一个例子来说明。
一、 创建一个应声器:
接上一篇中的工程TestJsf2.0,在其中加入如下文件:
echo.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>测试简单的复合组件</title>
<meta http-equiv="keywords" content="jsf2.0,组件,ajax" />
<meta http-equiv="description" content="测试简单的复合组件." />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</h:head>
<body>
<div id="header" style="padding:100px 0 20px 100px;font-size:22px;font-weight:bold;border-bottom:solid 1px red">
这个应声器的作者是:#{echo.encoder.author}。
</div>
<div>
<h:form id="form" style="padding:20px 0 20px 100px">
<div style="padding:20px;">
<span>请输入响应文字:</span>
<h:inputText value="#{echo.echoText}"></h:inputText>
</div>
<div style="padding-left:50px">
<h:commandButton id="post" style="padding:3px;width:100px;" value="提交响应" action="echo"/>
</div>
</h:form>
</div>
<h:panelGroup id="after">
<div style="padding:20px 0 0 100px">
响应:<h:outputText id="echo" value="#{echo.outText}" escape="false"></h:outputText>
</div>
</h:panelGroup>
</body>
</html>
InputEcho.java:
package test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "echo")
@SessionScoped
public class InputEcho implements java.io.Serializable {
private static final long serialVersionUID = 9113785890193860362L;
private String echoText;
private EchoEncoder encoder;
public InputEcho() {
encoder = new EchoEncoder();
}
/**
* @return the encoder
*/
public EchoEncoder getEncoder() {
return encoder;
}
/**
* @return the echoText
*/
public String getEchoText() {
return echoText;
}
public String getOutText() {
return encoder.Encode(echoText);
}
/**
* @param echoText the echoText to set
*/
public void setEchoText(String echoText) {
this.echoText = echoText;
}
public void echo() {
}
}
EchoEncoder.java:
package test;
public class EchoEncoder implements java.io.Serializable{
private static final long serialVersionUID = 8306351263183979293L;
private String author = "pout";
/**
* @return the author
*/
public String getAuthor() {
return author;
}
public String Encode(String msg) {
return msg.replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "<br/>");
}
}
先看第一个文件echo.xhtml,其中action="echo",此处没有如JSF1.2中写一个表达式,这是新加入的一种导航方式,可以直接写文
件的除后缀以外的名称,JSF2引擎会自动找到对应的文件,然后导航。另外看看escape="false"属性,这个是为了直接将内容中的标签以
html方式显示,你可以调整本例中escape以及后台返回的outText的方法,看看前面的显示,这是非常有趣的。
好了,这个例子可以运行了,在页面中输入http://localhost:8080/TestJsf2.0/echo.xhtml就可以访问了。
二、 将输入值组件化:
现在真正将上述例子用自定义的复合组件改写一下,整个过程会非常简单,后台的bean都不用改写,只用改变页面就行。
我们看看自定义的组件echoInputText.xhtml,此页面需要放在WebRoot下的resources/echo/文件夹下。
echoInputText.xhtml:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<composite:interface>
<composite:attribute name="echo"/>
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
<div style="padding:20px;">
<span>请输入响应文字:</span>
<h:inputText value="#{cc.attrs.echo.echoText}"></h:inputText>
</div>
</composite:implementation>
</html>
此文件将echo.xhtml中的
<div style="padding:20px;">
<span>请输入响应文字:</span>
<h:inputText value="#{echo.echoText}"></h:inputText>
</div>
提取出来,做成一个echoInputText组件,然后修改echo.xhtml为以下样子:
echo.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:echo="http://java.sun.com/jsf/composite/echo"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>测试简单的复合组件</title>
<meta http-equiv="keywords" content="jsf2.0,组件,ajax" />
<meta http-equiv="description" content="测试简单的复合组件." />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</h:head>
<body>
<div id="header" style="padding:100px 0 20px 100px;font-size:22px;font-weight:bold;border-bottom:solid 1px red">
这个应声器的作者是:#{echo.encoder.author}。
</div>
<div>
<h:form id="form" style="padding:20px 0 20px 100px">
<echo:echoInputText echo="#{echo}"></echo:echoInputText>
<div style="padding-left:50px">
<h:commandButton id="post" style="padding:3px;width:100px;" value="提交响应" action="echo"/>
</div>
</h:form>
</div>
<h:panelGroup id="after">
<div style="padding:20px 0 0 100px">
响应:<h:outputText id="echo" value="#{echo.outText}" escape="false"></h:outputText>
</div>
</h:panelGroup>
</body>
</html>
这两个文件修改后就可以运行了。
我们来分析一下自定义的echoInputText组件,先看看echo.xhtml文件有什么变化。看看xml命名空间中加入了
xmlns:echo="http://java.sun.com/jsf/composite/echo",这个就是用来引用自定义的组件的,其中
http://java.sun.com/jsf/composite/会默认指向到resources文件夹,后面直接跟资源的目录。
resources文件夹是JSF2.0的一个默认资源放置文件夹,后面的echo就是指resources/echo/文件夹了。整个命名空间的意思就
是将此文件夹命名为echo。再看看echo.xhtml文件中一处变化:
<echo:echoInputText echo="#{echo}"></echo:echoInputText>
此段告诉我们直接采用了echo命名空间下的echoInputText组件,其中有一个属性为echo,指向的就是managed bean:echo。
再看看echoInputText组件:
<composite:interface>
<composite:attribute name="echo"/>
</composite:interface>
这一段用来定义此组件接口,并且定义一个属性,属性名为echo。
<composite:implementation>
<div style="padding:20px;">
<span>请输入响应文字:</span>
<h:inputText value="#{cc.attrs.echo.echoText}"></h:inputText>
</div>
</composite:implementation>
这一段用来实现组件,其实中间的内容就是原先echo.xhtml文件中的输入组件,cc.attrs是JSF2.0组件定义中默认属性,可以用来引用接口中定义的属性。
最后,我们已经完成了一个简单的自定义符合组件,其中还用到了一下新的特性,大家可以多多查看JSF2.0的接口定义,去更多的了解。
在下一篇中我们来一起看看JSF2.0组件中另外一个激动人心的改进,页面模版化。
分享到:
相关推荐
本例中的"jsf2.0版本helloworld"就是一个基础的入门示例,旨在展示如何在MyEclipse环境中配置和运行一个简单的JSF应用。 **JSF 2.0的关键特性** 1. **Faces Flow**: JSF 2.0引入了Faces Flow,这是一种新的导航模型...
文档《JSF2.0系列简介.doc》可能详细介绍了JSF 2.0的基础知识和实践指导,而压缩包中提供的源代码可能是为了演示如何在实际项目中使用JSF 2.0。这些示例可能涵盖了以下内容: - **创建基本的JSF页面**:展示如何...
在本系列文章中,作者通过一个名为places的应用程序来演示JSF 2.0的新特性。该应用利用Yahoo! Web服务来获取地图和天气信息。用户输入地址,应用程序通过调用Web服务获取地图的多个缩放级别和天气预报,然后在JSF...
在Java服务器端开发中,JavaServer Faces (JSF) 是一个用于构建用户界面的MVC框架,而RichFaces是JSF的一个扩展库,提供了一系列强大的组件和功能,以提升用户体验和开发效率。在这个场景中,我们关注的是JSF 2.0与...
综上所述,`jsf2.0(mojarra-2.0.2-FCS-binary.zip)`是一个全面的JSF 2.0开发工具包,包含了从开发到部署所需的所有组件和文档,为Java Web开发者提供了强大的工具集,便于他们构建高效、易维护的Web应用。...
《JSF 2.0 Cookbook》通过一系列实际的案例来教授读者如何利用JSF 2.0的各种特性。这些案例覆盖了从基础到高级的多个层面,包括但不限于: - **基础组件和表单处理**:如何创建和使用各种UI组件,如输入字段、按钮...
JSF 2.0是基于组件的框架,它提供了一系列预先定义的UI组件,如按钮、表单、文本框等,开发者可以通过声明式方式在页面上使用这些组件。每个组件都与后台Bean的属性绑定,允许数据的双向传递。此外,JSF 2.0支持...
本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我们的例子基本以手写为主,这样也能让我们有更清楚的认识,同时推荐目前...
7. **案例研究**:通过一系列实际案例,展示了如何运用JSF 2.0构建复杂的企业级应用。 #### 四、特点亮点 - **全面性**:本书不仅覆盖了JSF 2.0的核心概念和技术,还包含了大量示例代码和最佳实践建议。 - **...
它将一系列视图和转换逻辑封装在一起,提供了更好的用户体验。 3. **全双工通信**:JSF 2支持WebSocket协议,使得服务器和客户端之间的通信更加实时,增强了交互性。 4. **异步处理**:通过`<f:ajax>`标签,开发者...
`jstl.jar`和`javax.servlet.jsp.jstl.jar`提供了JSTL库,包含了一系列用于处理常见任务的标签,如条件判断、迭代、国际化等,与JSF结合使用可以增强视图的可读性和维护性。 9. **其他辅助库**: 为了支持一些...
JSF提供了一系列预定义的UI组件,如按钮、文本框、表格等,可以方便地通过HTML标签或EL表达式在页面上使用。例如: - `<h:inputText>`:用于创建文本输入字段。 - `<h:commandButton>`:创建一个提交按钮,可以触发...
1. **JSF2.0-Reference.pdf** - 这是一份详细的JSF 2.0官方参考文档,涵盖了JSF 2.0的所有特性和API。该文档对于深入理解JSF的工作原理、生命周期、事件处理、数据绑定以及组件使用等方面至关重要。你可以从中学习...
JSF 2.0通常需要一系列的库,如Servlet API、EL(Expression Language)和JSF实现库(如Mojarra)。开发者需要正确地配置项目的类路径,以确保所有依赖都被正确加载。 7. **文件结构** 虽然没有列出具体的文件结构...
**JSF和Ajax** JSF 2.0引入了对Ajax的支持,通过`<f:ajax>`标签或第三方库如PrimeFaces,开发者可以实现局部刷新,提升用户体验。 **综合实践** 《JSF IN ACTION》这本书将理论知识与实践案例相结合,帮助读者掌握...
- **添加依赖**:首先,需要将`jsf2.0+richfaces4.2.3`压缩包中的所有jar文件添加到项目的类路径中。这些jar文件通常包括JSF的核心库、RichFaces的库以及可能的其他依赖。 - **配置web.xml**:更新`web.xml`文件,...
在"JSF Web应用开发实战源码"这个资源中,你将找到一系列针对JSF框架的实践示例。这些实例涵盖了JSF的基础到进阶用法,对于初学者来说是极好的学习材料。下面,我们将深入探讨JSF的一些核心概念和技术点: 1. **JSF...
6. **JSF生命周期**:JSF处理每个HTTP请求时会经历一系列的阶段,包括初始化、处理请求、验证、更新模型、调用业务逻辑和呈现响应。每个阶段都为开发者提供了插入自定义逻辑的机会。 7. **FacesContext**:这是JSF...