如何将列表值列表从jsp传递给servlet

时间:2014-04-26 13:26:46

标签: java javascript html jsp servlets

我有一个要求,例如当用户选择多行表示计算机部件时 并点击提交我已经在servlet中获得所有选定的部分,然后我需要创建部件对象并设置属性

<html>
<body>
    <form action="/OneServlet">
        <c:foreach item="part" value="${computer.spareParts}">
            <tr>
                <td><input type="checkbox" name="${part.no}"></td>
                <td>${part.no}</td>
                <td>${part.name}</td>
                <td>${part.cost}</td>
                <td>${part.discription}</td>
            </tr>
        </c:foreach>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

一个解决方案是使用javascript创建字符串并传递给Servlet,然后在servlet中拆分字符串。

我没有使用任何框架和jquery。

请建议最佳方式。

4 个答案:

答案 0 :(得分:0)

为所有复选框指定相同的名称,并在servlet中使用request.getParameterValues(checkbox_name),它返回所有选定的值。

API供您参考 http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html

答案 1 :(得分:0)

为循环中的所有复选框仅指定一个名称,即partNumbers。这将是String数组中所有选中的复选框。

    <html>
    <body>
        <form action="/OneServlet" method="POST">
            <c:foreach item="part" value="${computer.spareParts}">
                <tr>
                    <td><input type="checkbox" name="partNumbers"></td>
                    <td>${part.no}</td>
                    <td>${part.name}</td>
                    <td>${part.cost}</td>
                    <td>${part.discription}</td>
                </tr>
            </c:foreach>
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>

将您的spareParts集合存储为:

    request.getSession().setAttribute("list", spareParts);

因此,当您提交此表单时,您可以通过request.getParameterValues()方法检索oneservlet中的所选备件,该方法返回包含给定请求参数中所有值的String对象数组:

    public class OneServlet extends HttpServlet{
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException{
        String[] partNumbersSelected = request.getParameterValues("partNumbers");
        HttpSession session = request.getSession();
        List spareParts = session.getAttribute("list");
        /*This is pseudo code
        for(spareParts loop){
            for(partNumbersSelected){
                if(partNumberSelected matches spareParts){
                        retrieve part name, cost, description from spareParts
                }
            }
        }   */  
        }
    } 

在此基本上,您将捕获所选的部件号并从备件集合中检索其余的详细信息。

答案 2 :(得分:0)

我认为最好的解决方案之一是将其存储在会话中

在您的jsp页面中,您可以这样尝试..

ArrayList lst = new ArrayList();
lst.add("test1");
lst.add("test2");
session.setAttribute("list", lst);

在您的servlet中......

HttpSession session = request.getSession();
Arraylist lst = (ArrayList) session.getAttribute("lst");

答案 3 :(得分:0)

你可以试试这个:

<强> HTML

<html>
<body>
    <form action="/OneServlet">
        <c:foreach item="part" value="${computer.spareParts}">
            <tr>
                <td><input type="checkbox" name="partNo" value="${part.no}"/></td>
                <td>${part.no}</td>
                <td>${part.name}</td>
                <td>${part.cost}</td>
                <td>${part.discription}</td>
            </tr>
        </c:foreach>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

<强>的servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException{
    String[] partNos = request.getParameterValues("partNo");
    // your logic
}