将映射或对象从jsp传递到servlet

时间:2013-02-07 11:43:17

标签: java jsp servlet-3.0

我有一个应用程序将地图从servlet传递给jsp。在jsp中,我显示地图并提供删除或编辑地图值的选项。但是,在更改值之后,如何将地图发送回另一个servlet,在那里收到地图。

假设,我有一个servt“servletA”,它将地图传递给jsp,如下所示:

public int Id=11111;
Map<String,String> configParamsMap=new HashMap<String,String>(size);
    configParamsMap.put("1", "arg1");
    configParamsMap.put("2", "arg2");
    configParamsMap.put("3", "arg3");
    configParamsMap.put("4", "arg4");
    //
    System.out.println("parameters passing to the jsp:: appId"+appId+"::configId"+configId);
    request.setAttribute("configParamsMap", configParamsMap);
    request.setAttribute("Id", Id);


    RequestDispatcher rd = request.getRequestDispatcher("/JSP/display.jsp");
    rd.forward(request, response);

在jsp中,我可以删除或编辑值。我正在执行如下删除并传递参数

<c:forEach var="configParams" items="${configParamsMap}">
    <!--  KEY: ${configParams.key}  - VALUE: ${configParams.value} -->

    <tr>
        <td>
        <c:out value="${configParams.key}" />
        </td>
        <td><input type="text" name="" value="${configParams.value}" /></td>

    </tr>
</c:forEach>
</table>
<form action="sevletB?action=Delete" method="post"><input
type="submit" value="Delete"></input>
<input type="hidden" name="Id" value="${Id}"></input>   
</form>

我的问题是如何将映射传递回另一个servlet“servletB”,就像我对参数“id”所做的那样。该地图应该是用户编辑了一些值的地图,即jsp中地图的当前状态。

3 个答案:

答案 0 :(得分:4)

将所有代码写在表单标记内。

使用此代码:

<c:forEach var="configParams" items="${configParamsMap}" varStatus="itemsRow">
   <tr>
        <td>
        <c:out value="${configParams.key}" />
        </td>
        <td><input type="text" name="" value="${configParams.value}" /></td>
  </tr>
</c:forEach>

使用包含${configParams.key}值的隐藏字段。使用循环迭代器${itemsRow.index}来创建区分参数名称,如

<input type="text"name="configParam.${itemsRow.index}"value="${configParams.value}" />

当提交表单时,您可以通过getParameter('')方法提供名称来访问请求中的所有这些值。

答案 1 :(得分:2)

您无法通过HTTP请求传递Map。 我想你想跟踪所有的变化,特别是从JSP到服务器端的删除

因此,不将其存储在请求中,而是将其存储在会话中 在JSP中

session.setAttribute("configParamsMap", configParamsMap);

在您的servlet中获取要从请求中删除的ID

    String idToDelete = request.parameter("id");

    //Now delete the id from the map
    Map<String,String> configParamsMap = (Map<String,String>)session.getAttribute("configParamsMap");

//Delete it from the map
configParamsMap.remove(idToDelete );

答案 2 :(得分:1)

  • 您可以拥有隐藏的<input type=Select>
  • 使用地图
  • 的值填充
<select name="mapname" type="hidden??">
    <c:forEach items="${mapitem}" var="mapname">
        <option value="${mapitem.key}">${mapitem.value}</option>
    </c:forEach>
</select>
  • 提交给servletB(在servletB中读取)