我有一个应用程序将地图从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中地图的当前状态。
答案 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>