`

JSF 2.0简介:初识Ajax,一个简单的例子(系列之五)

    博客分类:
  • jsf
阅读更多
从本期介绍开始,我们来看看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调用的事情交给专家们去做吧,我们只来关注业务实现。

分享到:
评论

相关推荐

    JSF2.0与Ajax交互实现.pdf

    - **概述**: `&lt;f:ajax&gt;`是JSF 2.0提供的用于实现Ajax功能的主要标签之一。 - **render**: 该属性用于指定客户端上需要更新的元素。 - **execute**: 指定服务器端需要处理的元素。 - **event**: 触发Ajax请求的...

    JSF2.0实战 - 10、自定义Ajax更新方式

    2. **JSF 2.0的Ajax API**:JSF 2.0引入了`&lt;f:ajax&gt;`标签,它允许开发者声明式地添加Ajax行为到JSF组件上。通过设置`render`、`execute`等属性,我们可以指定哪些组件应该被更新和执行。 3. **自定义Ajax行为**:...

    JSF2.0源代码

    7. **Ajax增强**:JSF 2.0提供了内置的Ajax支持,通过`&lt;f:ajax&gt;`标签和`javax.faces.behavior.ajax`注解,简化了异步更新。 **三、Mojarra源代码分析** 通过查看源代码,我们可以深入了解以下关键组件: 1. **...

    jsf2.0版本helloworld

    本例中的"jsf2.0版本helloworld"就是一个基础的入门示例,旨在展示如何在MyEclipse环境中配置和运行一个简单的JSF应用。 **JSF 2.0的关键特性** 1. **Faces Flow**: JSF 2.0引入了Faces Flow,这是一种新的导航模型...

    jsf2.0实例

    文档《JSF2.0系列简介.doc》可能详细介绍了JSF 2.0的基础知识和实践指导,而压缩包中提供的源代码可能是为了演示如何在实际项目中使用JSF 2.0。这些示例可能涵盖了以下内容: - **创建基本的JSF页面**:展示如何...

    JSF2.0 的ajax实现的例子,配有详细的中文注释

    **JSF 2.0(JavaServer Faces 2.0)是Java EE平台中的一个用于构建Web应用程序的用户界面框架。它提供了一种组件化、声明式的方式来创建动态、交互式的Web界面。在这个例子中,我们将深入探讨JSF 2.0如何实现Ajax...

    Mojarra JSF2.0库文件

    Mojarra-2.1.1-FCS(Final Candidate Release)是Mojarra的一个候选版本,通常在正式版本发布之前,用于社区测试和反馈。这个版本可能包含了一些新的功能和修复的bug,但相比正式版可能存在一些已知问题。 综上所述...

    JSF2.0:Validating User Input

    下面是一个简单的示例,展示如何使用JSF 2.0的内置验证器和自定义验证器: ```xml &lt;h:form&gt; &lt;h:inputText value="#{bean.userName}" required="true"&gt; &lt;f:validateRegex pattern="[a-zA-Z0-9]*"/&gt; &lt;/h:inputText...

    JSF2.0实战 - 6、TextBox

    JSF(JavaServer Faces)是Oracle公司提供的一个用于构建Web应用程序的MVC框架,而JSF 2.0版本带来了许多改进和新特性,使开发更加简便高效。 首先,TextBox在JSF中被称为`h:inputText`,它是一个用于收集用户单行...

    JSF2.0 开发简介

    在本系列文章中,作者通过一个名为places的应用程序来演示JSF 2.0的新特性。该应用利用Yahoo! Web服务来获取地图和天气信息。用户输入地址,应用程序通过调用Web服务获取地图的多个缩放级别和天气预报,然后在JSF...

    JSF.2.0.最新2010教程

    JSF 2.0作为JSF的一个重大更新版本,在2010年发布,引入了许多新特性来简化Web应用程序的开发过程。 **JSF 2.0 的主要特点包括:** - **组件模型增强**:JSF 2.0引入了更多的UI组件,并且支持更灵活的自定义组件...

    jsf 2.0 api和imp的jar包+源码包+doc

    JSF 2.0是其一个重要版本,带来了许多改进和新特性,使得开发更加高效且易于维护。这个压缩包包含了JSF 2.0的API jar包、实现库(即impl jar包)、源码以及doc帮助文档,为深入理解和学习JSF提供了全面的资源。 API...

    JSF2.0标签手册

    JSF2.0标签手册DQSV

    jSF2.0与Spring整合实例+教程

    JSF 是一个用于构建用户界面的组件模型框架,而 Spring 则是一个全面的后端服务管理框架。将两者整合,可以实现从前端到后端的无缝衔接,提供强大的功能和灵活性。 **JSF 2.0 知识点:** 1. **组件模型**:JSF 2.0...

    Jsf2.0 Refrence

    **JSF 2.0(JavaServer Faces 2.0)是Java EE平台中的一个用于构建Web用户界面的组件框架。这个框架允许开发者通过声明式的方式处理用户交互,减轻了编写大量HTML和JavaScript代码的负担。** 在"Jsf2.0 Reference...

    JSF 2.0 (Mojarra 2.0.2-FCS)

    Mojarra是JSF规范的主要实现之一,版本2.0.2-FCS(Final Candidate Release)是该版本的一个稳定版本。 1. **组件库增强**: JSF 2.0中,组件库得到了显著增强,引入了更多的内置组件,如`&lt;h:outputText&gt;`、`&lt;h:...

    JSF2.0的一个简单Demo

    综上所述,"JSF2.0的一个简单Demo"不仅是一个学习和实践JSF2.0的好资源,也是理解Web应用开发中MVC模式和组件化思想的重要途径。通过阅读和分析Demo中的代码,开发者可以提升自己在Java Web领域的技能,更好地应对...

Global site tag (gtag.js) - Google Analytics