Posted on 2006-05-25 01:08
誰伴我闖蕩 阅读(1173)
评论(1) 编辑 收藏
你问我什么叫ajax,我也不太了解,我了解的是那支培养了无数荷兰足球精华的Ajax,谁知道怎么有人用几个单词的头字母也能凑出这个单词来,不过感觉用它来做东西,应该会挺有意思的
比如当用户在注册的时候,用户点一个按纽不用刷新界面就可以获得一句提示,是有这人还是没有这人啊?这次我尝试了用ajax技术来做一个三级关键的下拉列表,而这是我要讲的关键。
其实现在一般的ajax都是向Servlet发出请求,之后服务器响应,再偷摸的把结果传给它,之后显示出来,而换到Struts,有人会发甍,也一样,Action是Servlet,DispatchAction也是,只要把代码往这里写,让它往.do那里请求就行了。
在接下来我就向大家介绍我是怎样实现上述功能的
因为大学里面的结构是这里的
学院-专业-班级-学生
在学生注册的时候他是依赖于上述对象的,所以用户注册就需要一个三级的下拉选择
而ajax就能象变魔术一样,从服务器那里偷摸弄来您需要的列表
下面我先给大家展示一下第一个功能是怎么实现的吧?
当用户在注册的时候,点一个按纽,之后会弹出一个alert来告诉你这个用户是否有人用了,下面就让我们来看看这个功能是怎么实现的吧?
<html:button styleClass="cancel" property="submit" value="验证用户是否存在" onclick="teacherCheck()"/>
这里定义了按纽,用来测试老师是否已经存在了
大体的ajax的JS代码都上面这四部分,
先是创建XMLHttpRequest,
var xmlHttp;
function createXMLHttpRequest()
{
if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
之后是客户响应部分的代码
function teacherCheck()
{
var f = document.TeacherRegisterForm 从表单里读字段
var user = f.user.value
if(user=="")
{
window.alert("用户名不能为空!")
f.user.focus()
return false
}
else
{
createXMLHttpRequest() 这里都是精华了
var url = "ajax.do?method=checkUserIsExist&user="+user 定义响应地址
xmlHttp.open("GET",url, true) 发出响应
xmlHttp.onreadystatechange = checkUser 把从服务器得到的响应再传给另个函数
xmlHttp.send(null)
}
}
function checkUser()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
alert(xmlHttp.responseText) 这里是对响应结果的操作,在这里我们是滩出对话框,并把服务器发来的信息显示出来
}
}
}
我把所有乱七八糟的操作都放到了一个DispatchAction里,所以它也不例外的在这个DA中了
public ActionForward checkUserIsExist( ActionMapping mapping,
ActionForm form, HttpServletRequest req, HttpServletResponse res )
throws Exception
{
Service service = getService();
res.getWriter().write(service.checkUserIsExistForAjax( req.getParameter( "user" ) ) );
return null;
}
它仅仅是把业务逻辑部分的结果发送回去,而真正的判断是在业务逻辑那里实现的,
public String checkUserIsExistForAjax( String user )把结果弄成String的形式传回去
{
Connection connection = null;
PreparedStatement pstmt1 = null;
ResultSet rs = null;
try
{
connection = getConnection();
pstmt1 = connection
.prepareStatement( "select * from user where user=?" );
pstmt1.setString( 1, user );
rs = pstmt1.executeQuery();
rs.last();
if ( rs.getRow() > 0 )
{
return ID.M_EXIST; 用户存在
}
}
catch ( Exception e )
{
e.printStackTrace();
}
finally
{
close( rs );
close( pstmt1 );
close( connection );
}
return ID.M_NOEXIST;用户不存在
}