-Iterator

昨日エントリでの太一さんコメントですが、考察してみました。

@PageModel
public interface TaskModel {
  @AccessByIndex
  List<Task> getTask();
}

(@AccessByIndexの属性にアイテム型を書かなくてもパーサーで型が取れるので必須としないように今朝仕様変更。)これが、コードジェネレートされると以下のように開きます。型がListの場合ですが、配列の場合もそれなりに同様なつくりにします。

public class TaskModel$$Adaptor
implements ModelAdaptor, TaskModel, Serializable {
  private List<Task> _task;
  public List<Task> getTask() {
    return _task;
  }
  public void setTask(List<Task> task) {
    _task = task;
  }
  public Task getTask$$Adaptor(int index) {
    return _task.get(index);
  }
  public void setTask$$Adaptor(int index, Task value) {
    _task.put(index, value);
  }
  ....(以下、略)
}

JSPのforEachでは、ループする要素について、Collectionおよび配列でいけちゃうからこんな感じ。モデルへの式からのアクセス方法はまだ実装していないので仮に暗黙変数"pageModel"で置いてます。

<c:forEach items="${pageModel.task}" var="item">
  <c.out value="${item.description}"/>,
</c:forEach>

JSTLでもjava.util.Iteratorの提供メソッドは特に必須ではないように思います。どうかなぁ?