2012-09-14 26 views
2

我需要在jsp頁面中顯示來自servlet的數據。 目前,我有這樣的:在jsp中顯示來自servlet的數據,但不覆蓋當前值

SERVLET:

Object data = text; 
request.setAttribute("data", data); 
request.getRequestDispatcher("index.jsp").forward(request, response); 

JSP:

<p>result: ${data}</p> 

在JSP中有一個簡單的文本框和發送按鈕。 當我按下發送按鈕時,響應正在被覆蓋超時。

我怎麼能這樣做,每次搜索後,我看到一個新行結果? 我也想看以前的搜索...

非常感謝!

回答

1

你有兩個選擇:

  1. 送過來的電流值到服務器,執行搜索並追加新的結果出現,並且整個字符串發送回JSP中Request再次顯示。如果您仍想在<p>中顯示data而不是輸入字段,則必須將該值包裝在<input>標記中,可能爲<input type="hidden">

    JSP:

    <input type="hidden" name="oldData" value="${data}"/> 
    <p>result: ${data}</p> 
    

    的Servlet:

    Object newData = text; 
    Object oldData = request.getParameter("oldData"); 
    request.setAttribute("data", oldData + "<br/>" + newData); 
    request.getRequestDispatcher("index.jsp").forward(request, response); 
    
  2. 存儲所有的會話範圍data值,只是追加到它從你的servlet。 JSP將不得不從會話範圍輸出值而不是請求。在此示例中,值存儲在唯一連接的String中。它可能更好地將data的每個值存儲在數據結構中,例如List,並且只是在JSP中迭代它,以便分隔符保留在視圖中。

    JSP:

    <c:if test="${not empty sessionScope.data}"> 
        <p>result: ${sessionScope.data}</p> 
    </c:if> 
    

    的Servlet:

    Object newData = text; 
    Object oldData = request.getSession().getAttribute("data"); 
    request.getSession().setAttribute("data", oldData + "<br/>" + newData); 
    request.getRequestDispatcher("index.jsp").forward(request, response); 
    
+0

謝謝,很好的回覆! – Nico

0

1。使用的陣列,而不是在小服務程序

  1. 簡單對象填充用新的值的陣列:Servlet的

  2. 陣列導線並顯示過的位置要顯示的每個項目隨着新線

+0

的OP要保持先前搜索的歷史價值。 –

0

你把你的數據在RequestScope你必須將它們添加到SessionScope爲了見T他以前的結果。

看到這個例子:http://viralpatel.net/blogs/jsp-servlet-session-listener-tutorial-example-in-eclipse-tomcat/

JSP中編寫java代碼並不是很好的做法,因此您需要將邏輯轉移到servlet中。但這個例子描述了你需要的點。

+0

@Blame如果你遵循該鏈接,請記住[避免使用腳本](http://stackoverflow.com/a/3180202/851811)並使用[JSTL](http://www.oracle.com/technetwork/java) /index-jsp-135995.html)和[EL](http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html)。 –