先以一个问题开始,如果我们的webapplication中对geodatabase进行了编辑,大家都知道,这个时候需要一个提交编辑并保存,或者提交编辑并取消的过程,大家都用过ArcMAP,如果没有用过ArcMAP,word总是用过的,编辑过的东西,一关闭,肯定会给你警告。这个问题在桌面程序中简直就不是问题,在web上,我们倒是可以来说一说了,因为server和你的browser可能相距几万公里,你这边要关闭browser,在美国的服务器怎么能够知道你要关闭呢?服务器上运行的是JSF的Bean,而客户端运行的是Javascript,怎么让Javascript去感知后台的情况,给用户一个提示,这样就会很好地显示我们程序的友好性,对建设以人为本的和谐社会也大有好处。那么我们来看看如何做这个事情。
Browser关闭时会产生onUnload事件,有了这个事件,使我们有机会做一些事情,比如下面的语句,显示一个信息
<body onUnload="javascript: alert('你要关闭我么?')">
在body中添加了这一句后,是不是已经看到了那个温柔的问句呢?如果是,那么你的Browser是支持这个onUnload事件的。下面来看这段代码:
function checkTime(){
var isModified=<c:out value="${editBean.edited }"/>;
if(isModified ==true)
alert("更新没有保存");
}
这个代码很有意思,其它的好说,<c:out value="${editBean.edited }"/>不好理解,这是JSTL,如果没有见过JSTL,google或者baidu一下看看吧。editBean是一个标准的JSF的bean,它在faces-config.xml文件中部署,它有一个属性和属性的getter,setter方法,如下:
private boolean edited=false;
public boolean isEdited() {
return edited;
}
public void setEdited(boolean edited) {
this.edited = edited;
}
你在开始编辑的时候,设置edited为true就可以了。JSTL能够用过<c:out>标签访问到这个bean的值。这样,就实现了前台Javascript和后台JSF bean的联动。
AJAX和JSF如何结合。
这是将来SERVER JAVA的开发人员都会问的一个问题。那么如何能够让AJAX能够在服务器上和客户端连起来。
要应用AJAX的条件是:
1、 一个支持javascript的浏览器,当然,现在主流的浏览器都是支持Javascript的。
2、 浏览器必须支持XMLHTTP或者XMLHttpRequest对象。
3、 能够以XML发送响应的服务器端。服务器端可以有很多的技术来实现,不管你是用ASP,JAVA,都可以实现。当然,本文要讨论的局限于JSF技术。
对于熟悉大多数服务器端程序编写的工程师,比如我,Javascript完全是另外一个世界。但是了解Javascript,将使你的程序更加强大,开发起来更加容易。一个很有意思的功能是如果用户在编辑地图的时候,编辑到中途,忘记保存了,这提醒我们可以做一个比较有意思的功能,自动保存。在google mail中,你是不是已经感觉到过这个自动保存的功能了呢?反正我当时看到的时候吓了一跳。以一个服务器端程序员的思路去思考,会觉得不可思议。事实上这个功能就可以用Ajax技术来实现,用一个定时器,每隔5分钟自动发送一个保存的请求就可以实现这样的功能。
再看一个自动查找的例子,比如一个输入一个用户后自动出来和该用户有关的信息,可以通过这样的方法来实现:
<input type="text" id="query" size="20" onkeyup="search(‘query’);">
Search(‘query’)方法可以发送一个Ajax请求到客户端,进行查询后,将结果以XML请求返回,这样就不需要刷新整个页面而进行部分更新。就这么一个小小的技术,让用户在继续Web 浏览的时候感觉更好,也成为了各个网站争相模仿的对象,一些开发人员也发现了宝贝一样言必称Ajax,甚至成为项目选型的关键,这大概也是最初的开发者想象不到的。
来看看Javascript如何来发送一个XMLHttpRequest请求的。来看一下下面的代码:
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
这是再简单不过的实例化XMLHttpRequest的一段代码,实例化一个之后,你就可以像操作一个普通的对象一样操作它,它有很多的方法,比如下面的方法是建立和服务器端的链接:
req.open("GET", url, true);
第一个参数是HTTP请求的方式:”Get”或者”Post”,第二个参数是服务器的URL,第三个参数是是否进行非同步的请求。大家如果已经仔细研究了我们ESRI的工具标签,你会发现这些标签里面有一个clientPostBack属性可以设置是否进行异步请求。我们可以知道,Web ADF在后面肯定用了open方法的第三个参数来进行。要小心的是,如果你要设置clientPostBack为true,你的javascript代码可能需要重新构建一下。不然这些代码可能不会被执行。因为异步请求更新的是部分页面。
异步请求的意思是在请求时浏览器可以做其它的事情,那么如何得知服务器端的处理已经结束,可以更新页面上的数据了呢?我们来看看XMLHttpRequest对象的方法
req.onreadystatechange = processXMLResponse;
当服务器端的处理结束时,就可以调用processXMLResponse方法,我们就可以通过对这个方法进行编程来处理请求,当然可以是任何的名字的方法,只要将方法注册到onreadystatechange方法即可。
XMLHttpRequest初始化完成后就可以发送到请求到服务器端了,用一个很简单的方法即可:
req.send(null);
当然,一般get用的实在太少,我们最关心的是Post,看看Post应该怎么做:
req.open("POST", "/agsviewer", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded";
req.send("__ADFPostBack__=true&formId=f"+"&mapId=Map0&ajaxdemo=ajaxdemo ");
Post可以发送一些数据到服务器端,这正是我们所需要的。我们来继续看看一个请求当前比例尺的代码:
function updateInfoResponse(xmlHttp) {
if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var xml = xmlHttp.responseXML;
document.getElementById("scale").value = "1:" + xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;
}
}
看一下判断了(xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200,判断4是表示处理已经结束,判断200表示HTTP请求正常,相信大家都见过404的HTTP请求,令人讨厌的“page not found”。
判断结束后,就用xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;语句把比例尺取过来。
相信大家都大致知道AJAX是怎么回事了,下一次我会写一个简单的例子。
分享到:
相关推荐
9、ArcGIS Server JAVA讲座--实现后台JSF Bean和前台Javascript的联动 24 10、ArcGIS Server JAVA讲座 --AJAX基础 25 11、ArcGIS Server JAVA开发讲座--- ADF中的Ajax函数 27 12、ArcGIS Server Java讲座--如何在用...
一组后台bean(为在一个页面上的UI组件定义的属性和函数的JavaBean组件) 应用程序配置资源文件(定义页面导航规则、配置bean和其它的自定义对象,如自定义组件) 部署描述文件( web.xml ) 一组由应用...
2. JSF Bean的使用:JSF(JavaServer Faces)是一个Java标准,用于构建Web应用程序。JSF Bean是一个特殊的Java类,用于存储和操作Web应用程序的数据。 3. 数据表格的实现:在JSF页面中,使用`t:dataTable`标签来...
### JavaServer Faces (JSF) 完全参考手册知识点概览 ...综上所述,《JavaServer Faces完全参考手册》详细介绍了JSF的核心概念和技术,从基础知识到高级主题均有覆盖,是一本非常全面的指南书籍。
《2007年图书:JSP_JSF_Tomcat Web编程从入门到精通》这本书主要涵盖了Java服务器页面(JSP)、JavaServer Faces(JSF)以及Tomcat应用服务器在Web开发中的应用,旨在帮助初学者及有一定基础的开发者深入理解和掌握...
通过《JavaServer Faces (JSF) in Action》这本书,读者可以深入理解JSF的工作原理,学习如何设计和实现高效的JSF应用,以及如何解决实际开发中遇到的问题。无论你是初学者还是经验丰富的开发者,都能从中受益。
**大学学生管理系统**是基于JavaServer Faces(JSF)技术和MySQL数据库进行开发的Web应用程序,旨在提供一套完整的大学学生管理解决方案。本系统涵盖了从数据存储、界面设计到业务逻辑处理等多个层面,帮助管理员...
JSF,全称JavaServer Faces,是Java平台上的一个用于构建用户界面的框架,它为创建基于组件的Web应用程序提供了一种模型-视图-控制器(MVC)架构。 本文主要围绕JavaScript和JSF的基础知识进行阐述,以及如何结合...
- ADF和JSF的结合可以帮助开发者实现更复杂的GIS功能,如后台JSF Bean和前端JavaScript的联动,以及使用Ajax进行异步交互。 4. **自定义开发与扩展**: - 讲座涵盖了自定义工具和命令的开发,这是ArcGIS Server ...
JavaServer Faces(JSF)是Java平台上的一种用于构建用户界面的服务器端框架,它简化了创建Web应用程序的过程,特别是那些需要复杂用户交互的应用程序。在提供的压缩包中,有两个重要的jar文件:`jsf-api.jar`和`jsf...
总结,ArcGIS Server Java ADF结合了JSF的强大UI构建能力,为开发者提供了一个全面的工具集,以构建与GIS紧密集成的Java应用程序。通过理解和熟练运用JSF以及ADF,开发者可以创建出高效、用户友好的GIS解决方案,...
JavaServer Faces(JSF)是Java平台上的一种用于构建用户界面的服务器端框架,它主要用于开发Web应用程序。这个“JSF ppt课件”很显然是为了帮助学习者深入理解JSF的核心概念和技术。以下是对JSF的一些关键知识点的...
- **定义**:JavaServer Faces (JSF) 是Java EE标准技术之一,用于构建Web用户界面。它提供了一套完整的框架来开发服务器端应用程序,能够将视觉展示与应用逻辑清晰地分离。 - **特点**: - 强大的框架支持,便于...
**JSF(JavaServer Faces)** 是一个Java平台上的Web应用程序框架,用于构建用户界面,尤其是在前后端数据交互方面有着强大的功能。JSF的核心概念是组件模型,它提供了丰富的UI组件,通过HTML和XML标记(即JSF标签)...
**JSF(JavaServer Faces)** 是一个Java平台上的Web应用程序框架,用于构建用户界面。它简化了开发人员创建交互式、数据驱动的Web应用程序的过程。JSF提供了一种组件模型,允许开发者通过声明性方式来构建用户界面...
- **JSF (JavaServer Faces)**:一种用于构建企业级Web应用程序的标准Java技术。它提供了一种简化的方式来构建用户界面,并且能够更好地处理用户输入以及服务器端业务逻辑。 - **Managed Beans**:在JSF中用于封装...
《JavaServer Faces核心编程(第3版)》是由David Geary和Cay Horstmann撰写,王超翻译的中文版技术书籍,全面讲解了JavaServer Faces(JSF)2.0的开发技术。JSF是Java平台上的一个用于构建企业级Web应用的组件框架,...
3. **数据绑定和验证**:JSF支持将组件的值与后台bean的属性直接绑定,简化了数据的获取和更新。同时,提供了内置的验证机制,可以自定义验证规则,确保输入数据的有效性。 4. **事件处理**:JSF中的组件可以触发和...
JavaServer Faces(JSF)是Java企业版(Java EE)中的一个组件模型和用户界面(UI)框架,专为构建可维护、可扩展且具有良好用户体验的Web应用程序而设计。JSF的核心理念是将用户界面与业务逻辑解耦,提供一种声明式...