后台通过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>&nbsp;&nbsp;<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向前台传值,前台如何去获取其中的对象或属性值

javaweb 后台知识点

Jsp和后台的交互

request.setAttribute()与getParameter() 的区别

java中前台怎么把数据传给后台

SpringMvc如何返回后台数据