您的位置:首页 > 其它

局部刷新的两种实现方式

2008-09-11 20:22 501 查看
最近忙于上海东方有线的项目,客户需要一些下拉框的局部刷新功能,我参看了其他同事的代码,发现并未实现数据的异步传输,而是采用from局部提交的方式。以下是整理出来的经典下拉列表局部刷新功能Example的部分关键代码,采用了两种方式:localRefresh_1.jsp的功能全部自己手动编写;localRefresh_2.jsp采用prototype.js的方法。

createXHR.js:(创建XMLHttpRequest)

function createXMLHttpRequest() {

var xmlHttp;

if(window.ActiveXObject) {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}

else if(window.XMLHttpRequest) {

xmlHttp = new XMLHttpRequest();

}

return xmlHttp;

}

startRequest.js:(向服务器发送数据)

function startRequest_get(xmlHttp, url) {

xmlHttp.onreadystatechange = handleStateChange;

xmlHttp.open("GET", url, true);

xmlHttp.send(null);

}

function startRequest_post(xmlHttp, url, parameter) {

xmlHttp.open("POST", url, true);

xmlHttp.onreadystatechange = handleStateChange;

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

xmlHttp.send(parameter);

}

localRefresh_1.jsp:(自己编写JS)

<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'test.jsp' starting page</title>

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

<script type="text/javascript" src="<%=path%>/js/createXHR.js"></script>

<script type="text/javascript" src="<%=path%>/js/startRequest.js"></script>

<script type="text/javascript">

<!--

var xmlHttp = createXMLHttpRequest();

function startRequest() {

var parameterStr = "languageType=" + document.getElementById("langeuage").value;

startRequest_post(xmlHttp, "<%=path%>/getAndPostExample.do", parameterStr);

}

function handleStateChange(){

if(xmlHttp.readyState == 4) {

if(xmlHttp.status == 200 || xmlHttp.status == 0) {

getSecondList();

}

}

}

function getSecondList() {

document.getElementById("second").innerHTML = xmlHttp.responseText;

}

//-->

</script>

</head>

<body>

<br>This is my JSP page. <br>

<input type="button" value="button">

<br>

<select id="langeuage" onchange="startRequest()">

<option value="0">please</option>

<option value="1">Java</option>

<option value="2">C/C++</option>

<option value="3">Perl</option>

<option value="4">.net</option>

</select>

<div id="second" style="display:inLine">

<select id="languageDesc">

<option value="0">please</option>

<option value="1_1">J2SE</option>

<option value="1_2">J2EE</option>

<option value="1_3">J2ME</option>

<option value="2_1">C90</option>

<option value="2_2">C99</option>

<option value="2_3">C++</option>

<option value="3_1">perl</option>

<option value="4_1">VB</option>

<option value="4_2">VC</option>

<option value="4_3">C#</option>

</select>

</div>

</body>

</html>

localRefresh_2.jsp:(利用prototype.js实现局部刷新)

<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'test.jsp' starting page</title>

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

<script type="text/javascript" src="<%=path%>/js/prototype-1.4.0.js"></script>

<script type="text/javascript">

<!--

function startRequest(){

var url = '<%=path%>/getAndPostExample.do';

var pars = "languageType=" + $F("langeuage");

var myAjax = new Ajax.Updater(

'second',

url,

{

method: 'post',

parameters: pars

});

}

//-->

</script>

</head>

<body>

This is my JSP page. <br>

<input type="button" value="button">

<br>

<select id="langeuage" onchange="startRequest()">

<option value="0">please</option>

<option value="1">Java</option>

<option value="2">C/C++</option>

<option value="3">Perl</option>

<option value="4">.net</option>

</select>

<div id="second" style="display:inLine">

<select id="languageDesc">

<option value="0">please</option>

<option value="1_1">J2SE</option>

<option value="1_2">J2EE</option>

<option value="1_3">J2ME</option>

<option value="2_1">C90</option>

<option value="2_2">C99</option>

<option value="2_3">C++</option>

<option value="3_1">perl</option>

<option value="4_1">VB</option>

<option value="4_2">VC</option>

<option value="4_3">C#</option>

</select>

</div>

</body>

</html>

GetAndPostExample.java:(重写doPost和doGet,将结果写入jsp)

package common;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class GetAndPostExample extends HttpServlet{

/**

*

* @param request

* @param response

* @param method

* @throws IOException

*/

public void poressRequest(HttpServletRequest request, HttpServletResponse response,

String method) throws IOException {

response.setContentType("text/html");

String languageType = request.getParameter("languageType");

PrintWriter out = response.getWriter();

out.print(new CreateLanguageDesc().getLanguateDesc(languageType));

out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

poressRequest(request, response, "GET");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

poressRequest(request, response, "Post");

}

}

CreateLanguageDesc.java(业务逻辑,组织数据)

package common;

/**

* This class user for chose language and translate the result into HTML

* @author ibm

*

*/

class CreateLanguageDesc {

/**

*

* @param languateType

* @return

*/

String getLanguateDesc(String languateType) {

StringBuffer select = new StringBuffer();

StringBuffer options = new StringBuffer();

select.append("<select id='languageDesc'>");

if(languateType == null || languateType.equals("")) {

createPlease();

}

else if(languateType.equals(LanguateType.JAVA)) {

options.append(createJava());

}

else if(languateType.equals(LanguateType.C)) {

options.append(createC());

}

else if(languateType.equals(LanguateType.Perl)) {

options.append(createPerl());

}

else if(languateType.equals(LanguateType.NET)) {

options.append(createNet());

}

else {

options.append(createAll());

}

select.append(options);

select.append("</select>");

return select.toString();

}

/**

* create please options

* @return

*/

private StringBuffer createPlease() {

StringBuffer options = new StringBuffer();

options.append("<option value='0'>Please</option>");

return options;

}

/**

* create javaDesc options

* @return

*/

private StringBuffer createJava() {

StringBuffer options = new StringBuffer();

options.append("<option value='1_1'>J2SE</option>");

options.append("<option value='1_2'>J2EE</option>");

options.append("<option value='1_3'>J2ME</option>");

return options;

}

/**

* create C/C++Desc options

* @return

*/

private StringBuffer createC() {

StringBuffer options = new StringBuffer();

options.append("<option value='2_1'>C90</option>");

options.append("<option value='2_2'>C99</option>");

options.append("<option value='2_3'>C++</option>");

return options;

}

/**

* create PerlDesc options

* @return

*/

private StringBuffer createPerl() {

StringBuffer options = new StringBuffer();

options.append("<option value='3_1'>Perl</option>");

return options;

}

/**

* create .netDesc options

* @return

*/

private StringBuffer createNet() {

StringBuffer options = new StringBuffer();

options.append("<option value='4_1'>VB</option>");

options.append("<option value='4_2'>VC</option>");

options.append("<option value='4_3'>C#</option>");

return options;

}

/**

* create all of languageDesc options

* @return

*/

private StringBuffer createAll() {

StringBuffer options = new StringBuffer();

options.append(createPlease());

options.append(createJava());

options.append(createC());

options.append(createPerl());

options.append(createNet());

return options;

}

}

相比之下,localRefresh_2.jsp的代码要简单的多,多利用开源工具不仅提高了效率,还提高了可读性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: