浏览 3458 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-12
最后修改:2008-11-19
最近做毕设发现Ajax提交到Struts后在Action里不需要out.write来构造html或xml了。因为可以就当没有Ajax存在一样去写Action,XMLHttpRequest就能获得Action所转发到的jsp生成的html。说起来很抽象,还是看代码: login.jsp:
<%@ page language="java" pageEncoding="gbk"%> <html> <head> <title>JSP for LoginForm form</title> <script type="text/javascript"> function GE(a){return document.getElementById(a);} function createXMLHttpRequest() { var xmlhttp; if (window.ActiveXObject) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function login(){ var xmlhttp = createXMLHttpRequest(); if(xmlhttp) xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4){ if(xmlhttp.status==200){ GE('msg').innerHTML=xmlhttp.responseText; //alert(xmlhttp.responseText); }else{ GE('msg').innerHTML=xmlhttp.statusText; //alert(xmlhttp.statusText); } }else{GE('msg').innerHTML="正在提交数据...";} }; xmlhttp.open('POST','login.do?name='+GE('name').value+'&password='+GE('password').value,true); xmlhttp.send(null); } </script> </head> <body> <h2 align="center">Ajax应用实例: 登录模块</h2> <form action="login.do" method="post"> 帐号 : <input type="text" id="name" name="name"/><br> 密码 : <input type="password" id="password" name="password"/> <br><input type="button" onclick="login()" value="Ajax提交"><br><br> <input type="submit" value="普通提交"> </form> <div id="Layer1"> <div id="msg"></div> </div> </body> </html>
struts-config.xml:
<action-mappings > <action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" type="com.neusoft.struts.action.LoginAction"> <forward name="loginSuccess" path="/loginSuccess.jsp" /> </action> LoginAction.java:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException { //LoginForm loginForm = (LoginForm) form; String name = request.getParameter("name"); request.setAttribute("name", name); System.out.println(name); return mapping.findForward("loginSuccess"); }
loginSuccess.jsp
<body> <h2 align="center" style="font-size: 20px;color: blue;"> 登录成功!</h2><br> getParameter:<%=request.getParameter("name") %> getAttribute:<%=request.getAttribute("name") %> </body> 就这样,login.jsp中的xmlhttp.responseText得到的字符串就是loginSuccess.jsp所生成的页面的源代码。 于是在Action里根本不需要构造html或xml或json了,只需把得到数据放到request里,然后转发到jsp(loginSuccess.jsp),在jsp里取出数据,显示;但这个jsp将自身源码以字符串形式传给Ajax页面(login.jsp)。多个jsp,但不需要手工构造 html或xml或json等了。 不知道这是不是个传递数据的捷径呢?
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-13
嗯,这个没什么的新鲜的啊,组织xml是为了给数据一个说明。
xml有具体的标准,A和B可以制定出通用的xml数据标准。 如果返回的数据比较复杂的话,还是需要xml来组织的。 |
|
返回顶楼 | |
发表时间:2008-05-13
完全可以通过AJAX请求应用,返回格式可以是 JSON/XML
|
|
返回顶楼 | |
发表时间:2008-05-13
didiluck 写道 嗯,这个没什么的新鲜的啊,组织xml是为了给数据一个说明。
xml有具体的标准,A和B可以制定出通用的xml数据标准。 如果返回的数据比较复杂的话,还是需要xml来组织的。 可能是我返回的数据还不是太复杂,就是数组迭代出的表格,表格的行数是变化的,如果返回xml或json,需要先构造xml/json,再在页面里用javaScript来解析生成表格,比较麻烦,所以我就按那种方法了,反而比较简单。 |
|
返回顶楼 | |
发表时间:2008-05-13
一直都是这么干的 jsp页面里也可以写json,xml
|
|
返回顶楼 | |