3

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

假设,我有一个servet“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 中地图的当前状态。

4

3 回答 3

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('')方法中提供名称来从请求中访问所有这些值。

于 2013-02-07T12:16:53.073 回答
3

好吧,您不能通过 HTTP 请求传递 Map。我想您想跟踪所有更改,尤其是从 JSP 到服务器端的删除

因此,与其将其存储在 request 中,不如将其存储在 session 中的 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 );
于 2013-02-07T13:30:32.250 回答
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 中读取)
于 2013-02-07T11:56:44.123 回答