スクリプトレットを使用せずに、JSP で while ループのような構造を作成する方法はありますか?
リンクされたリストのような構造 (具体的には、例外の原因チェーンを出力する) があるので、私の知る限り、forEach を使用するためのイテレータ インターフェイスがありません。
<c:forEach>
ビュー用にデータを準備する役割を持つコントローラーは、この反復不可能なデータ構造をJSTL タグで使用できるコレクションに変換する必要があります。
リストを反復処理することでそれを行うことができます
<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));
}
コレクションを反復処理したくない場合は<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 までの選択ドロップダウンが生成されます。