一个简单的登陆列子 输入 ID 密码 登陆
如果输入错误 返回登陆界面 并提示错误
如果登陆成功 跳到成功界面其实这个东西 拿Struts来做很简单
但是这里我想改进一下
1. 如果登陆成功的话那么跳到成功页面 (这里没有什么异议)
2. 如果登陆不成功的话 那么会回到登陆页面 这里就有个问题
如果 使用Struts的话 那么就会有个刷新的效果 所以我想在这个步骤这里用Ajax的无刷新效果代替也就是说 这个例子我想使用Struts+ajax来完成一次登陆操作
想达到的效果是
1 成功登陆 ----> 跳转到成功页面
2 登陆失败 ----> 利用Ajax的无刷新效果提示错误部分代码如下先声明 代码都为正确 自己也近过调试
index.jsp
<tr>
<td align=center>
<table border=0 cellpadding=0 cellspacing=0 bgcolor="#ffffff">
<tr>
<td align=right><bean:message key="login.uname" /></td>
<td>
<html:text property="uname" size="20" maxlength="20" value="" styleClass="login_input"></html:text>
</td>
</tr>
<tr>
<td align=right><bean:message key="login.upass" /></td>
<td>
<html:text property="upass" size="20" maxlength="20" value="" styleClass="login_input"></html:text>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=10></td>
</tr>
<tr>
<td align=center>
<!-- 这个按钮调用了JS的方法 利用Ajax进行数据传送 -->
<html:button property="submit" onclick="userCheck()">
<bean:message key="login.submit"/>
</html:button>
</td>
<tr>
下面的是Ajax相关的部分代码function userCheck()
{
name = document.loginForm.uname.value;
pass = document.loginForm.upass.value;
sendRequest("login.do?name="+name+"&pass="+pass);
}
//其他XMLHttpReq声明函数 以及 发送请求函数 省去 以下是 处理返回信息函数 function processResponse() {
if (XMLHttpReq.readyState == 4) { // 判断对象状态
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
if(XMLHttpReq.responseXML.getElementsByTagName("res")[0]!=null)
{
var res=XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
window.alert(res);
}
} else { //页面不正常
window.alert("页面不正常");
}
}
}
下面是的我的Action
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String uname = request.getParameter("name");
String upass = request.getParameter("pass");
System.out.println(uname+"***"+upass);
PrintWriter out;
try {
out = response.getWriter(); if(uname.equals("sa")&&upass.equals("sa"))
{
//如果登陆成功那么跳转到成功页面
return mapping.findForward("done");
}
else
{
//如果失败 那么返xml格式的信息
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
out.print("<response>");
out.println("<res>");
out.println("Error!!");
out.println("</res>");
out.print("</response>");
} } catch (IOException e) {
e.printStackTrace();
}
return null;
}运行以后 输入错误后登陆后
alert()显示"Error!"
但是我输入正确时 没有跳转反应我自我总结了一下
也许是Ajax的特性
如果是通过Ajax传数据过去 那么一定要接收回来
无论Action里面的有无跳转
也许大家会说 这个可以直接使用 Struts来做 LZ你画蛇添足了
确实 这仅仅只是一个试验 而我想使用Struts+Ajax来实验一下
因为我感觉Ajax是一个类似组件的东西 所以应该可以随意安插在程序里面有人说 LZ那你可以使用Ajax 到Servlet来做啊
这样可以 但是我觉得 如果一个程序使用了Struts 那么还有必要去使用Servlet吗?希望能够引起大家的相关讨论看能不能使用Struts+Ajax来实现我想要的功能
如果输入错误 返回登陆界面 并提示错误
如果登陆成功 跳到成功界面其实这个东西 拿Struts来做很简单
但是这里我想改进一下
1. 如果登陆成功的话那么跳到成功页面 (这里没有什么异议)
2. 如果登陆不成功的话 那么会回到登陆页面 这里就有个问题
如果 使用Struts的话 那么就会有个刷新的效果 所以我想在这个步骤这里用Ajax的无刷新效果代替也就是说 这个例子我想使用Struts+ajax来完成一次登陆操作
想达到的效果是
1 成功登陆 ----> 跳转到成功页面
2 登陆失败 ----> 利用Ajax的无刷新效果提示错误部分代码如下先声明 代码都为正确 自己也近过调试
index.jsp
<tr>
<td align=center>
<table border=0 cellpadding=0 cellspacing=0 bgcolor="#ffffff">
<tr>
<td align=right><bean:message key="login.uname" /></td>
<td>
<html:text property="uname" size="20" maxlength="20" value="" styleClass="login_input"></html:text>
</td>
</tr>
<tr>
<td align=right><bean:message key="login.upass" /></td>
<td>
<html:text property="upass" size="20" maxlength="20" value="" styleClass="login_input"></html:text>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=10></td>
</tr>
<tr>
<td align=center>
<!-- 这个按钮调用了JS的方法 利用Ajax进行数据传送 -->
<html:button property="submit" onclick="userCheck()">
<bean:message key="login.submit"/>
</html:button>
</td>
<tr>
下面的是Ajax相关的部分代码function userCheck()
{
name = document.loginForm.uname.value;
pass = document.loginForm.upass.value;
sendRequest("login.do?name="+name+"&pass="+pass);
}
//其他XMLHttpReq声明函数 以及 发送请求函数 省去 以下是 处理返回信息函数 function processResponse() {
if (XMLHttpReq.readyState == 4) { // 判断对象状态
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
if(XMLHttpReq.responseXML.getElementsByTagName("res")[0]!=null)
{
var res=XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
window.alert(res);
}
} else { //页面不正常
window.alert("页面不正常");
}
}
}
下面是的我的Action
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String uname = request.getParameter("name");
String upass = request.getParameter("pass");
System.out.println(uname+"***"+upass);
PrintWriter out;
try {
out = response.getWriter(); if(uname.equals("sa")&&upass.equals("sa"))
{
//如果登陆成功那么跳转到成功页面
return mapping.findForward("done");
}
else
{
//如果失败 那么返xml格式的信息
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
out.print("<response>");
out.println("<res>");
out.println("Error!!");
out.println("</res>");
out.print("</response>");
} } catch (IOException e) {
e.printStackTrace();
}
return null;
}运行以后 输入错误后登陆后
alert()显示"Error!"
但是我输入正确时 没有跳转反应我自我总结了一下
也许是Ajax的特性
如果是通过Ajax传数据过去 那么一定要接收回来
无论Action里面的有无跳转
也许大家会说 这个可以直接使用 Struts来做 LZ你画蛇添足了
确实 这仅仅只是一个试验 而我想使用Struts+Ajax来实验一下
因为我感觉Ajax是一个类似组件的东西 所以应该可以随意安插在程序里面有人说 LZ那你可以使用Ajax 到Servlet来做啊
这样可以 但是我觉得 如果一个程序使用了Struts 那么还有必要去使用Servlet吗?希望能够引起大家的相关讨论看能不能使用Struts+Ajax来实现我想要的功能
解决方案 »
- struts2框架的this.message错误信息输不出来
- eclipse导入的工程,无法添加进tomcat
- 今天面试官考线程池,对大牛们可能很简单,大家有兴趣的做一下
- 符号问题 "/",在线等
- 关于bean的一个问题?(在线等待)
- SSH项目怎样发布到windows server服务器上?
- 求一些专业名词的英文,明天交论坛,急!
- 好多地方没人理,就来这了!!!
- jsp页面样式只有从别的页面跳转过来才显示,单独运行不显示
- spring data jpa OpenEntityManagerInViewFilter不起作用
- JSP如何访问一个本地文件的链接呢
- JSP报错信息 description The server encountered an internal error () that prevented it from fulfilling this request.
判断成功以后out.println(mapping.findForward("done").getPath()) 跳转就交给AJAX的JS代码咯
<action
attribute="loginForm"
name="loginForm"
path="/login"
scope="request"
type="cn.suiyang.struts.action.LoginAction" >
<forward name="done" path="/2.jsp"></forward>
</action>
这是struts-config.xml
让我在js里面用location.href进行跳转??
struts只用mapping.findForward("done").getPath()读配置中的"/2.jsp"
ajax回调处理后交给location.href跳转
既然错误是用的JS来处理的话,用来JS跳转也更符合程序的一致性了
目前我只想到这种方法 期待其他高手提供更好的解决方案
我直接传递一个字符串回去然后在Ajax的响应函数里面做字符串判断
在用location.href进行跳转
if (XMLHttpReq.readyState == 4) { // 判断对象状态
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
if(XMLHttpReq.responseXML.getElementsByTagName("res")[0]!=null)
{
var res=XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
window.alert(res);
}
} else { //页面不正常
window.alert("页面不正常");
}
}
}
这个不是回凋函数吗?
self.location=""; // 这样写难道不好吗?
window.alert(res);