【问题标题】:Passing an ArrayList of a class from a jsp to a servlet将类的 ArrayList 从 jsp 传递到 servlet
【发布时间】:2014-03-16 07:24:15
【问题描述】:

我有一个 Room 类的 ArrayList。我需要将它从 jsp 发送到 servlet。

似乎html或jsp可以将值发送到servlet的唯一方法是通过表单,我尝试的方法是将其作为隐藏参数传递,如下所示:

<input type="hidden" name="allRooms" value="<%=request.getAttribute("allRooms") %>" />

但在我提交此表单的 servlet 中,我收到以下编译错误“字符串无法转换为列表”:

 List<Room> allRooms=(List<Room>)request.getParameter("allRooms");

只需先将参数转换为 Object 类型,然后将其转换为 List,如下所示会给出相同的异常,但这次是运行时异常:

 Object a=(Object)request.getParameter("allRooms");
 List<Room> allRooms=(List<Room>)a;

是否有任何方法可以将 List 传递给 servlet,否则我必须将其设置为 JSP 中的会话变量?

提前致谢。

【问题讨论】:

  • 请理解jsp输出HTML。当浏览器提交表单时,它会发送一个带有 HTML 中文本值的 http 请求。此时不涉及 Java 对象。

标签: java jsp servlets arraylist


【解决方案1】:

我认为您不应该直接将List 发送到Servlet,而应该注意其他选项。

您如何在浏览器页面上生成ArrayList?如果它是从 UI 中的多选元素生成的,那么您可以在Servlet 中以Array 的形式访问请求参数值。

希希尔

【讨论】:

    【解决方案2】:

    我想如果你传递以下参数,数组在servlet端形成

    param[0]=ss , param[1]=ssw
    

    你可以这样做。

    List<String> roomParams =(List<String>)request.getParameter("param");
    

    但要做到这一点。

    List<Room> allRooms=(List<Room>)request.getParameter("allRooms");
    

    我认为这是不可能的,所以你应该使用 Session 属性

    session.setAttribute("allRooms", new ArrayList<Room>());
    

    【讨论】:

    • 请求属性不合适。
    • 你是对的,更新我的响应以使用会话而不是请求,一旦用户更改页面就会消失。
    • 如果我使用 request 属性,我将不得不通过 request.getRequestDispatcher 发送它,并且我的表单输入将不会被发送。我也通过表格发送详细信息。所以它要么是表单详细信息,要么是列表。不能同时发送!我想使用 session 是唯一的解决方案!谢谢。
    【解决方案3】:

    是否有任何方法可以将 List 传递给 servlet,否则我必须将其设置为 JSP 中的会话变量?

    使用session。这是一种最佳解决方案。

    无法在 HTML 中表示 ArrayList 以通过 html 表单发送。请改用session。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2013-11-15
      • 2012-10-22
      • 2017-03-18
      • 1970-01-01
      • 2013-11-25
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多