2015-11-13 57 views
1

所以我试图让我的JSP从表中导出一个CSV文件。如何使用JSP和Servlets导出CSV

但我有一些问题:

我的编译器继续显示空指针错误,这还是不明白,是不是因为我的CSV脚本错误,不然我把脚本错误的servlet的方法内。

到目前为止,这里是我的JSP。

<%@page import="jxl.write.*"%> 
<%@page import="java.io.File" %> 
<%@page import="jxl.*" %> 


<%@page import="Model.FuzzyTopsis"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <title> 
     Fuzzy Topsis Supplier Selection 
    </title> 

    <!-- Normalize --> 
    <link href="assets/css/normalize.css" rel="stylesheet"> 

    <!-- Bootstrap --> 
    <link href="assets/css/bootstrap.min.css" rel="stylesheet"> 

    <!-- Bootstrap --> 
    <link href="assets/css/custom_style_00.css" rel="stylesheet"> 

    <!-- Font --> 
    <link href="assets/css/font.css" rel="stylesheet"> 

</head> 

<!-- BODY STARTS HERE --> 
<body> 
    <section class="main_wrapper">   
     <div class="table-responsive"> 
      <table class="table table-bordered"> 
       <tr> 
        <td>Name</td> 
       </tr> 

       <% 
        for (int i = 0; i < sNum; i++) { 
       %> 
       <tr> 
        <td>test-<%=i + 1%></td> 
       </tr> 
       <% 
        } 
       %> 
      </table> 
     </div> 

     <form method="post" action="./Page_Five_Controller"> 
      <div class="sub_form_wrapper"> 
       <div class="sub_form_input"> 
        <input class="btn btn-default btn-lg" type="submit" value="Download to XLS" name="submit"> 
       </div> 
      </div> 
     </form> 

    </section>  
</body> 

而且这里是我的servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 

    int sNum = (Integer) request.getSession().getAttribute("sNum"); 

    //Variabel excel 
    String header = "No, Nama Suppier"; 

    FileWriter fileWriter = new FileWriter("result.csv"); 
    fileWriter.append(header.toString()); 
    fileWriter.append("\n"); 

    for(int i=0;i<sNum;i++){ 
     fileWriter.append(String.valueOf(i+1)); 
     fileWriter.append(","); 
     fileWriter.append("TES"); 
     fileWriter.append("\n"); 
    } 

    fileWriter.flush(); 
    fileWriter.close(); 
} 

所以,任何人都可以请您指出我的错误或告诉我它是如何应该做?

而且,如果您想将表格导出为CSV,将脚本放在doPost()servlet函数内是否正确?

谢谢。

回答

0

这真是让人搞不懂。我会根据我的假设回答你的问题。我希望这是你想要的...因此,

假设你提供的servlet代码是用于servlet Page_Five_Controller,那么你得到例外的行就是这个int sNum = (Integer) request.getSession().getAttribute("sNum");。那是因为您尚未将值sNum设置为session隐式对象的属性。

如果我要在jsp中添加会话对象中的所有变量,然后转到servlet从会话中检索这些值(因为视图中没有任何更改),我该怎么办。

这将是这样的jsp中:

session.setAttribute("sName",sName); 
session.setAttribute("stringTemp",stringTemp); 
session.setAttribute("ccTemp",ccTemp); 
session.setAttribute("sNum",sNum); 
session.setAttribute("dNum",dNum); 
session.setAttribute("cNum",cNum); 

然后在你的servlet检索值这样的:

String[] sName = (String[]) request.getSession().getAttribute("sName"); 
String[] stringTemp = (String[]) request.getSession().getAttribute("stringTemp"); 
double[] ccTemp = (double[]) request.getSession().getAttribute("ccTemp"); 
int sNum = (Integer) request.getSession().getAttribute("sNum"); 
int dNum = (Integer) request.getSession().getAttribute("dNum"); 
int cNum = (Integer) request.getSession().getAttribute("cNum"); 

然后做循环在你的servlet和输出数据。

希望这有助于

+0

很抱歉,如果我的代码所造成的误解,但实际上我已经在会话中设置的obj那些atributes,在另一个小服务程序。所以,这似乎不是问题的根源。 如果您想将表格导出为CSV,将脚本放在doPost()servlet函数内是否正确? 谢谢。 – root

+0

但是我会在这个页面上编辑我的代码,这样不会导致进一步的误解。 – root

+0

这不是你在问你的问题..... – MaVRoSCy