• 后台通过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>
  • 相关阅读:
    p3c安装使用 编码规范扫描 阿里巴巴出品,挺好用的
    Ideal test 不执行main方法了
    Maven 3-Maven依赖版本冲突的分析及解决小结
    (String)强制转换、toString()和String.valueOf()的区别
    Linux tail 命令详解
    iconv的安装和使用
    daemon函数的原理及使用详解
    SQL Sever 2012 如何建立数据库连接
    Navicat Premium 将sqlserver 数据库 导入mysql 中
    MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
  • 原文地址:https://www.cnblogs.com/wanlige/p/12510171.html
Copyright © 2020-2023  润新知