2016-05-23 60 views
1

我是JSP的新手。我創建了一個在tomcat服務器上運行的JSP文件。我在我的程序中指定了我的目錄位置。我的程序顯示該目錄中的所有文件,並將結果顯示在表中並在文件名後面創建一個刪除按鈕。我的計劃是如下(JSP文件):如何使用Servlet和JSP提取行值?

<form method="post" action='FileDisplayURL' > 
    <h2>Current Collection</h2> 
    <table width="100%" border="1"> 

     <% 
      File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse"); 
      File[] listOfFiles = folder.listFiles(); 
      for (int i = 0; i < listOfFiles.length; i++) { 
     %> 
     <tr > 
      <% 
       if (listOfFiles[i].isFile()) { 
      %> 
      <td><%=listOfFiles[i].getName()%></td> 
      <td><input type="submit" value="delete" name="filename"></td> 
      <% 
       } 
      %> 
     </tr> 
     <% 
      } 
     %> 
    </table> 

</form> 

這是我的servlet:

@WebServlet("/FileDisplayURL") 
public class FileDisplay extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

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

    response.setContentType("text/html"); 

    String deleteFileName = request.getParameter("filename"); 
    System.out.println("you clicked on " + deleteFileName); 

    } 

} 

這是我的頭版看起來像:

enter image description here

我有用戶點擊刪除時獲取文件名的問題。

當我在Tomcat上運行我的程序,在終端輸出如下:

INFO: Server startup in 1076 ms 
you clicked on delete 

「你點擊了刪除」不顯示這是點擊文件的名稱。我對Servlet和JSP非常陌生。我可能會錯過某些明顯的東西。任何幫助,將不勝感激。

+1

第一課:不要使用scriptlets;使用單獨的控制器並使用JSP(或另一個模板系統;我更喜歡Thymeleaf)來渲染。 – chrylis

回答

1

這是一個HTML錯誤,一個按鈕就沒有價值(和你是不是無論如何增加值),你應該創建一個隱藏的輸入,並把文件名有:

<input type="hidden" value="<%=listOfFiles[i].getName()%>" name="filename"/> 

編輯:

我沒有意識到你有一個表單,因爲每個行都需要一個單獨的表單,因爲如果多個輸入具有相同的名稱,那麼servlet不知道放置了什麼值。所以,你的看法應該有:

<h2>Current Collection</h2> 
<table width="100%" border="1"> 

    <% 
     File folder = new File("C:/Apps/eclipse-jee-mars-2-win32-x86_64/eclipse"); 
     File[] listOfFiles = folder.listFiles(); 
     for (int i = 0; i < listOfFiles.length; i++) { 
    %> 
    <tr > 
     <% 
      if (listOfFiles[i].isFile()) { 
     %> 
     <td><%=listOfFiles[i].getName()%></td> 
     <td> 
      <form method="post" action='FileDisplayURL' > 
       <input type="submit" value="delete"> 
       <input type="hidden" value="<%=listOfFiles[i].getName()%>" name="filename"/> 
      </form> 
     </td> 
     <% 
      } 
     %> 
    </tr> 
    <% 
     } 
    %> 
</table> 

編輯2:

只是爲了澄清你的錯誤:當你點擊發送按鈕 ,瀏覽器準備增加體內的鍵值列表的請求與活化形式裏面所有的參數,如果你使用一個形式幾個字段具有相同名稱的服務器無法猜測這是正確的值:

Body: 
filename=a 
filename=b 
filename=c 
filename=d 

應該選擇哪個值? 所以,你需要一個每個名字只有一個值的表格(或者可能是括號表)

+0

感謝您的回覆。我能夠得到文件名。但是當我點擊刪除時,它只顯示我首先點擊的文件的名稱。當我點擊其他文件時,它不顯示該文件的名稱。它只顯示我點擊的第一個文件名。查看我的控制檯輸出:http://i.stack.imgur.com/yAV1z.png – Rose

+1

您是否在我上次編輯後檢查了代碼?每行有一個表單?該代碼應該工作 – rekiem87

+0

非常感謝。它現在正在工作:) – Rose