1

スクリプトレットを使用せずに、JSP で while ループのような構造を作成する方法はありますか?

リンクされたリストのような構造 (具体的には、例外の原因チェーンを出力する) があるので、私の知る限り、forEach を使用するためのイテレータ インターフェイスがありません。

4

5 に答える 5

3

<c:forEach>ビュー用にデータを準備する役割を持つコントローラーは、この反復不可能なデータ構造をJSTL タグで使用できるコレクションに変換する必要があります。

于 2013-07-17T14:33:50.810 に答える
3

リストを反復処理することでそれを行うことができます

<c:forEach var="entry" items="${requestScope['myErrorList']}">
${entry.message}<br/>
</c:forEach>

編集:

次のようなメソッドを使用して、例外とその原因をリストに変換し、後でforEachを使用して表示できます。

public static List<Throwable> getExceptionList(Exception ex) {
  List<Throwable> causeList = new ArrayList<Throwable>();
  causeList.add(ex);
  Throwable cause = null;
  while ((cause = ex.getCause()) != null && !causeList.contains(cause)) {
    causeList.add(cause);
  }
  return causeList;
}

例えば:

try {
  ...
} catch (... ex) {
  request.setAttribute("myErrorList", getExceptionList(ex));
}
于 2013-07-17T14:39:23.857 に答える
1

コレクションを反復処理したくない場合は<c:forEach>、次のアプローチで従来のループと同等のものとして使用できます。

<c:set var="startIndex" scope="page" value="0"/>
<c:set var="endIndex" scope="page" value="12"/>

<select name="milestone_count" id="milestone_count">
    <option value="">-select-</option>
    <c:forEach begin="${startIndex}" end="${endIndex}" step="1" var="index">
        <option value="${index}">${index}</option>
    </c:forEach>
</select>

これにより、0 から 12 までの選択ドロップダウンが生成されます。

于 2016-07-24T06:36:54.473 に答える