从本期介绍开始,我们来看看JSF 2.0对Ajax的支持,一贯的,我们还是采用最实际的方式,例子来做说明。
我们回到系列三中实现的例子,从这个例子开始,加入一点Ajax功能。
首先创建一个ManagedBean用来记录我们提交按钮的数量。示例如下:
Count.java
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "count")
@RequestScoped
public class Count implements Serializable {
private static final long serialVersionUID = 6499154494910177344L;
private int count = 0;
public int getCount() {
return count;
}
public void countIt() {
count++;
}
}
再来改造一下我们的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">
<h:outputScript library="javax.faces" name="jsf.js" target="head"/>
<echo:echoInputText echo="#{echo}"></echo:echoInputText>
<div style="padding-left:50px">
<h:commandButton id="post" style="padding:3px;width:100px;" value="提交响应"
onclick="jsf.ajax.request(this, event, {execute:'form', render: 'after'}); return false;"
actionListener="#{count.countIt}"/>
</div>
</h:form>
</div>
<h:panelGroup id="after">
<div style="padding:20px 0 0 100px">
<div style="padding:0 0 10px 0">应声器更新次数:#{count.count}</div>
响应:<h:outputText id="echo" value="#{echo.outText}" escape="false"></h:outputText>
</div>
</h:panelGroup>
</body>
</html>
看看有些什么变化,其中加入了一行
<div style="padding:0 0 10px 0">应声器更新次数:#{count.count}</div>
用来记录更新次数。<h:outputScript library="javax.faces" name="jsf.js" target="head"/> 这一句用来引入JSF2.0的ajax支持,意思就是将JSF2.0的Ajax支持的javascript引用加到<h:head></h:head>标签之间。
再有一个变化就是CommandButton:
<h:commandButton id="post" style="padding:3px;width:100px;" value="提交响应"
onclick="jsf.ajax.request(this, event, {execute:'form', render: 'after'}); return false;"
actionListener="#{count.countIt}"/>
加入了一个onclick动作和一个监听事件。看到重点了,这儿解释一下onclick中的两个重要参数,execute:’form’是表示提交的是当前id为form的表单,render:’after’表示只更新id为after的页面元素。actionListener调用的是Count类中的countIt方法,这是JSF的事件模型,在以前的版本中就存在的,就不多做说明了。
好了,输入http://localhost:8080/TestJsf2.0/echo.xhtml可以查看一下运行效果,只有after之间的内容改变了吧。在JSF2.0中加入Ajax支持就是这么简单,^_^。具体的说明可参考https://javaserverfaces.dev.java.net/nonav/docs/2.0/jsdocs/symbols/jsf.ajax.html
JSF2.0中的Ajax有四个方法:jsf.ajax.addOnError(callback),jsf.ajax.addOnEvent(callback),jsf.ajax.request(source, event, options),jsf.ajax.response(request, context)。其中request用来请求,并通过options项设置错误回调,事件回调方法以及其他运行表单,更新内容等信息,response是回调方法,一般不需要自己设置,只要回传的方法符合标准,他会自动调用,并更新相应的位置,一个标准的返回数据如下:
<?xml version="1.0" encoding="utf-8"?>
<partial-response><changes><update id="after"><![CDATA[<span id="after">
<div style="padding:20px 0 0 100px">
<div style="padding:0 0 10px 0">应声器更新次数:1</div>
响应:<span id="echo">ddddd</span>
</div></span>]]></update><update id="javax.faces.ViewState"><![CDATA[-8017186116961147735:-2243811565520699646]]></update></changes></partial-response>
这个信息,我是用TCP/IP monitor截取,其中的中文部分在这个工具中是乱码,我为了看着方便,替换成中文了。
这个例子是可以正常运行了,不过用的时候是不是有一点不太对劲?计数总是1。^_^,这是一个陷阱。现在我们再修改一下Count.java,修改后如下:
Count.java
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name = "count")
@ViewScoped
public class Count implements Serializable {
private static final long serialVersionUID = 6499154494910177344L;
private int count = 0;
public int getCount() {
return count;
}
public void countIt() {
count++;
}
}
与前面唯一的差别就是将@RequestScoped修改为了@ViewScoped。再看看计数正常了吧,^_^,留一点悬念给大家,从这个例子可以体会一下新加入的ViewScoped作用域的用法。如果技术值还一直是1,那肯定是你没有重新部署,redeploy一下,Ok!
例子是不是很简单,那所有的javascript代码去了哪儿?如果你愿意,可以将最终生成的代码保存一下,查看一下javascript代码。所有的过程都已经有实现专家组给我们封装起来了,容易出错的javascript调用的事情交给专家们去做吧,我们只来关注业务实现。
分享到:
相关推荐
- **概述**: `<f:ajax>`是JSF 2.0提供的用于实现Ajax功能的主要标签之一。 - **render**: 该属性用于指定客户端上需要更新的元素。 - **execute**: 指定服务器端需要处理的元素。 - **event**: 触发Ajax请求的...
2. **JSF 2.0的Ajax API**:JSF 2.0引入了`<f:ajax>`标签,它允许开发者声明式地添加Ajax行为到JSF组件上。通过设置`render`、`execute`等属性,我们可以指定哪些组件应该被更新和执行。 3. **自定义Ajax行为**:...
7. **Ajax增强**:JSF 2.0提供了内置的Ajax支持,通过`<f:ajax>`标签和`javax.faces.behavior.ajax`注解,简化了异步更新。 **三、Mojarra源代码分析** 通过查看源代码,我们可以深入了解以下关键组件: 1. **...
本例中的"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页面**:展示如何...
**JSF 2.0(JavaServer Faces 2.0)是Java EE平台中的一个用于构建Web应用程序的用户界面框架。它提供了一种组件化、声明式的方式来创建动态、交互式的Web界面。在这个例子中,我们将深入探讨JSF 2.0如何实现Ajax...
Mojarra-2.1.1-FCS(Final Candidate Release)是Mojarra的一个候选版本,通常在正式版本发布之前,用于社区测试和反馈。这个版本可能包含了一些新的功能和修复的bug,但相比正式版可能存在一些已知问题。 综上所述...
下面是一个简单的示例,展示如何使用JSF 2.0的内置验证器和自定义验证器: ```xml <h:form> <h:inputText value="#{bean.userName}" required="true"> <f:validateRegex pattern="[a-zA-Z0-9]*"/> </h:inputText...
JSF(JavaServer Faces)是Oracle公司提供的一个用于构建Web应用程序的MVC框架,而JSF 2.0版本带来了许多改进和新特性,使开发更加简便高效。 首先,TextBox在JSF中被称为`h:inputText`,它是一个用于收集用户单行...
在本系列文章中,作者通过一个名为places的应用程序来演示JSF 2.0的新特性。该应用利用Yahoo! Web服务来获取地图和天气信息。用户输入地址,应用程序通过调用Web服务获取地图的多个缩放级别和天气预报,然后在JSF...
JSF 2.0作为JSF的一个重大更新版本,在2010年发布,引入了许多新特性来简化Web应用程序的开发过程。 **JSF 2.0 的主要特点包括:** - **组件模型增强**:JSF 2.0引入了更多的UI组件,并且支持更灵活的自定义组件...
JSF 2.0是其一个重要版本,带来了许多改进和新特性,使得开发更加高效且易于维护。这个压缩包包含了JSF 2.0的API jar包、实现库(即impl jar包)、源码以及doc帮助文档,为深入理解和学习JSF提供了全面的资源。 API...
JSF2.0标签手册DQSV
JSF 是一个用于构建用户界面的组件模型框架,而 Spring 则是一个全面的后端服务管理框架。将两者整合,可以实现从前端到后端的无缝衔接,提供强大的功能和灵活性。 **JSF 2.0 知识点:** 1. **组件模型**:JSF 2.0...
**JSF 2.0(JavaServer Faces 2.0)是Java EE平台中的一个用于构建Web用户界面的组件框架。这个框架允许开发者通过声明式的方式处理用户交互,减轻了编写大量HTML和JavaScript代码的负担。** 在"Jsf2.0 Reference...
Mojarra是JSF规范的主要实现之一,版本2.0.2-FCS(Final Candidate Release)是该版本的一个稳定版本。 1. **组件库增强**: JSF 2.0中,组件库得到了显著增强,引入了更多的内置组件,如`<h:outputText>`、`<h:...
综上所述,"JSF2.0的一个简单Demo"不仅是一个学习和实践JSF2.0的好资源,也是理解Web应用开发中MVC模式和组件化思想的重要途径。通过阅读和分析Demo中的代码,开发者可以提升自己在Java Web领域的技能,更好地应对...