后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
Posted wanlige
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值相关的知识,希望对你有一定的参考价值。
我们先来了解一下request.setAttribute和request.getAttribute()这两种方法的作用。
request.getAttribute("nameOfObj"); 可得到jsp页面表单中输入框内的value。(其实表单控件中的Object的name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value)
request.setAttribute(position,nameOfObj);属于页面之间的传值,从a.jsp到b.jsp一次传递,之后这个request就会失去他的作用范围,再传就要重新设一个request.setAttribute()。(使用session.setAttribute()会在一个过程中始终保持这个值)
注:javascript与jsp中不能相互传值,因为javascript运行在客户端,jsp运行在服务器端。若想使他们能够相互传参数,可以在jsp页面中设置一个hidden属性的控件,用它的value来传递所需的数值。
1、把js直接写在了JSP页面,所以能获取到。如果单独把JS抽离出来是不可能获取到的。前者服务端解析能或许到,后者客户端解析获取不到。
2、js里是在客户端执行的,不能直接获取,因为EL表达式是在服务器的时候被解析的,所以可以获取到。一个是客户端的东西,一个是服务器端的东西。
3、jsp能取到,那是因为他本身就是servlet。js不可能有方法直接获取到HttpServletRequest里面的属性值。
4、setAttribute是服务器行为,到了客户端就无效了,也谈不上如何用。除非你在jsp的时候就写到js变量里,或者使用ajax请求你需要的数据。
下面开始进入正题:
java后台通过:
request.setAttribute("msg","成功!!");
在jsp/html页面就可以通过EL表达式获取到request中设置的属性值:
<div>${msg}</div>
js中获取request中的值,就有两种方式:
第一种:
var msg="<%=request.getAttribute("msg")%>"; alert(msg);
第二种:
var msg="${msg}"; alert(msg);
这里不能写在引入的js页面中,上面已经说了,他们解析的方式不同,写在外部的js中识别不了,可以通过在html.jsp页面中设置一个隐藏域,然后获取它的value值。如:
JSP中: <input type="hedden" value="${student.name}" id="stuName"/> javascript中: var stuName=$(‘stuName‘).value;
我的后台代码:
@RequestMapping(value = "showList", method = RequestMethod.POST) private void showList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 前台获取的设备台账名 String sbtzname = request.getParameter("sbtzname"); // mongodb数据库名 String mongodbname = "filecollection"; String sssmid = request.getParameter("sssmid"); Mongo mongo = new Mongo(); DB db = mongo.getDB(mongodbname); GridFS gridFS = new GridFS(db,sbtzname); DBObject query = new BasicDBObject("userId", 1); List<GridFSDBFile> gridFSDBFileList = gridFS.find(query);// 查询所有的档案文件 try { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); carDataService = (CarDataService) ctx.getBean("carDataService"); DBCollectionInfo collection = new DBCollectionInfo(mongodbname, sbtzname); Map<String, Object> mapData = new HashMap<String, Object>(); mapData.get("smid"); DBCollectionInfo mapdbCollection = new DBCollectionInfo(mongodbname,sbtzname); Map<String, Object> whereClause = new HashMap<String, Object>(); whereClause.put("smid", sssmid); List<Map<String, Object>> lstResult = carDataService.getlistdata(mapdbCollection); lstResult = carDataService.getlistdata(mapdbCollection, whereClause);// 所有collection档案表 // 根据sssmid判断是否有档案数据 if (lstResult.size() != 0) { Map<String, Object> mapUser = lstResult.get(0); // 拿到的总的collection档案名字 String mapString = (String) mapUser.get("filename"); int a = gridFSDBFileList.size(); int b = 0; // 循环所有文件 for (int s = 0; s < a; s++) { // s-b是动态变化的,否则会报越界错误,因为gridFSDBFileList移除后size会改变 String listname = (String) gridFSDBFileList.get(s - b).get("filename"); // 如果文件名不包含就删除 if (!mapString.contains(listname)) { if (s == 0) { gridFSDBFileList.remove(s); // 记录删除次数 b = b + 1; } else { gridFSDBFileList.remove(s - b); // 记录删除次数 b = b + 1; } } else { // 如果文件名包含不做操作,保留数据 } } } else {// 档案中无此ssmid,全部为空 gridFSDBFileList = null; } String wanliid = sssmid; //将设备台账名字返回文件详情页面 request.setAttribute("sbtzname",sbtzname); request.setAttribute("wanli", wanliid); request.setAttribute("gridFSDBFileList", gridFSDBFileList); request.getRequestDispatcher("/fileList.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); request.setAttribute("gridFSDBFileList", gridFSDBFileList); request.getRequestDispatcher("/fileList.jsp").forward(request, response); } }
我的前台代码:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <% String path = request.getContextPath() + "/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> <script src="js/jquery.min.js"></script> <script type="text/javascript"> function goback(){ history.go(-2); } </script> </head> <body style="background-color:#000022"> <form > <c:if test="${empty gridFSDBFileList}"> <div align="center"><h1><b><font color="red">无文件!</font></b></h1></div> </c:if> <c:if test="${!empty gridFSDBFileList}"> <%-- <p><a href="<%=path %>/downLoadZipServlet.do?id=${o.id}">全部打包下载</a></p> --%> <c:forEach items="${gridFSDBFileList}" var="o"> <%-- <img src="<%=path %>fileServlet?method=downloadFile&id=${o.id }" width="109" height="87" /> --%> <b><font color="red">档案名称:${o.filename}</font></b>
<!--前台从后台取值-->
<br/><a href="<%=path %>downloadFile.do?id=${o.id}&sbtzname=${sbtzname}">下载</a> <a href="<%=path %>delete.do?id=${o.id}&wanliid=${wanli}&sbtzname=${sbtzname}">删除</a></p> </c:forEach> </c:if> </form> </body> </html>
以上是关于后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值的主要内容,如果未能解决你的问题,请参考以下文章
后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值