2010-01-22 39 views
4

我試圖存儲一個下拉列表的設置,它控制着花名冊中顯示的項目數。我如何去做這件事?下拉列表使用onChange對名單的結果進行排序。

+1

什麼是名冊? – BalusC 2010-01-22 02:34:04

+0

這只是一個用戶,項目等列表 – Reden 2010-01-25 19:51:36

回答

1

我不做Velocity,所以這裏是一個JSP/Servlet針對性的答案。我想你也使用Servlets,因爲Velocity實際上是一個模板引擎,並且對控制/預處理/後處理請求沒有任何作用。

所以你想保留後續請求中的某些數據?基本上有兩種方法可以實現這一點。

  1. 在隱藏的輸入元素中保留後續請求的值。例如。

    <form action="servlet" method="post"> 
        <select name="itemcount" onchange="submit()"> 
         <option>1</option><option>2</option><option>3</option> 
        </select> 
    </form> 
    

    ,然後在接下來的請求的形式:

    <form action="servlet" method="post"> 
        <select name="sortfield" onchange="submit()"> 
         <option>col1</option><option>col2</option><option>col3</option> 
        </select> 
        <input type="hidden" name="itemcount" value="${param.itemcount}"> 
    </form> 
    

    ${param.itemcount}基本上返回request.getParameter("itemcount")。當存儲在隱藏的輸入元素中時,您什麼都看不到,但在下一個請求中,它也可以由request.getParameter("itemcount")提供。

  2. 存儲會話中的值。例如。在Servlet中:

    Integer itemcount = (Integer) request.getSession().getAttribute("itemcount"); 
    

    但是,這有一個很大的警告:這可能會導致「跆拳道

    Integer itemcount = Integer.valueOf(request.getParameter("itemcount")); 
    request.getSession().setAttribute("itemcount", itemcount); 
    

    ,這樣就可以在需要時按如下方法訪問它在同一會話中運行任何Servlet? 「當用戶在同一個會話中打開多個窗口並在兩個窗口中選擇不同的itemcount時的體驗。窗口A中的最後一個選定值將反映到窗口B中!

我認爲很明顯你應該在請求範圍內保留請求範圍的數據,所以方式1更受歡迎。使用會話只有用於會話範圍數據。

+0

BalusC,謝謝你的回答。我試圖實現這一點,它沒有結果。我對此很新。我接管了一個網站,它的速度等。你認爲我可以使用 $ request.session.setAttribute 然後通過getAttribute請求會話?再次感謝。 – Reden 2010-01-25 19:53:49