3

サーブレットから jsp にマップを渡すアプリケーションがあります。jsp では、マップを表示し、マップの値を削除または編集するオプションを提供します。ただし、値を変更した後、マップを受信する別のサーブレットにマップを送信する方法。

次のようにマップをjspに渡すサーブレット「servletA」があるとします。

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>

私の問題は、パラメーター "id" に対して行ったように、マップを別のサーブレット "servletB" に戻す方法です。このマップは、ユーザーがいくつかの値 (つまり、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 からサーバー側への削除を追跡する必要があると思います

したがって、リクエストに保存する代わりに、セッションに保存します JSPで

session.setAttribute("configParamsMap", configParamsMap);

そして、サーブレットで、リクエストから削除する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 に答える