Передача карты или объектов из jsp в сервлет

У меня есть приложение, которое передает карту из сервлета в jsp. В jsp я отображает карту и предоставляет возможность удалить или отредактировать значения карты. Но после изменения значений, как отправить карту обратно другому сервлету, где он получает карту.

Предположим, у меня есть сервер "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>

Моя проблема в том, как передать карту обратно другому сервлету "servletB", как я сделал с параметром "id". Эта карта должна быть той, где пользователь либо отредактировал некоторые значения, то есть текущий статус карты в jsp.


person Mr. Singthoi    schedule 07.02.2013    source источник


Ответы (3)


Напишите весь свой код внутри тега формы.

Используйте этот код:

<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('').

person Muhammad Imran Tariq    schedule 07.02.2013

Ну, вы не можете передать карту через HTTP-запрос. Я полагаю, вы хотите отслеживать все изменения, особенно удаление из JSP на стороне сервера.

Поэтому вместо того, чтобы хранить его в запросе, сохраните его в сеансе В JSP.

session.setAttribute("configParamsMap", configParamsMap);

И в вашем сервлете получите идентификатор для удаления из запроса

    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 );
person Sudhakar    schedule 07.02.2013

  • Вы можете иметь скрытый <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)
person TheWhiteRabbit    schedule 07.02.2013
comment
не могли бы вы рассказать немного больше, с некоторыми береговыми кодами @TechExchange - person Mr. Singthoi; 07.02.2013
comment
Можете ли вы сказать мне, как я могу установить ‹input type=Select› и как я должен отправить его на сервлет B из jsp - person Mr. Singthoi; 07.02.2013
comment
это не точный синтаксис, о котором я только что упомянул, есть ввод типа выбора, см. приведенный ниже код - person TheWhiteRabbit; 07.02.2013
comment
Можете ли вы сказать мне точный синтаксис и обновить его, потому что, когда я пытаюсь это сделать, появляются ошибки - person Mr. Singthoi; 07.02.2013