使用 jsp 导出到 excel 时得到不同的随机数

Get different random numbers when using jsp export to excel

在jsp上生成10个随机数后,点击'export to excel'按钮。生成的 excel 显示 10 个不同的数字。 random numbers on jsp page

random numbers on excel file

为什么会这样?以及如何解决这个问题?

jsp 文件 的代码如下所示:

<%
    String exportToExcel = request.getParameter("exportToExcel");
    if (exportToExcel != null
            && exportToExcel.toString().equalsIgnoreCase("YES")) {
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "inline; filename="
                + "excel.xls");

    }

    for(Integer i=0;i<10;i++){
        String randomNum = (RandomStringUtils.random(1, false, true));
%>
        <%=randomNum%>
        <br/>
    <%
    }
    if (exportToExcel == null) {
    %>
        <br/>
        <a href="./test/randomNum.jsp?exportToExcel=YES"><button>Export to Excel</button></a>
    <%
    }
    %>

那是因为您每次都发出新的请求,并且每次都会生成一组新的号码。

请求 1:生成数字 然后您单击 link 并发出另一个请求,生成一组新的数字,您在 excel sheet 上看到。

为了能够导出第一个请求编号,您必须将它们保存在您的会话中并检索它们:

考虑这个示例代码:

<%@page import="java.util.Random"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
            String exportToExcel = request.getParameter("exportToExcel");
            if (exportToExcel != null
                    && exportToExcel.toString().equalsIgnoreCase("YES")) {
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-Disposition", "inline; filename="
                        + "excel.xls");

                ArrayList<Integer> numbers = (ArrayList<Integer>)session.getAttribute("NUMBERS");
                for(Integer x:numbers){
                    out.print(x);
                    out.print("<br/>");
                }

            } else {
                ArrayList<Integer> numbers = new ArrayList<Integer>();
                Random rand = new Random();
                for (Integer i = 0; i < 10; i++) {
                    String randomNum = String.valueOf(rand.nextInt());
                    numbers.add(Integer.parseInt(randomNum));

        %>
        <%=randomNum%>
        <br/>
        <%
            }
            if (exportToExcel == null) {
        %>
        <br/>
        <a href="randomNum.jsp?exportToExcel=YES"><button>Export to Excel</button></a>
        <%                }
                //store arraylist in session
                session.setAttribute("NUMBERS", numbers);
            }
        %>
    </body>
</html>

并将输出:

希望这对您有所帮助...