后台通過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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM