java - JSTL - 使用 forEach 迭代用户定义的类

标签 java jsp jstl iteration jsp-tags

<分区>

我需要将哪些方法添加到自定义 Java 类中,以便我可以迭代其中一个成员中的项目?我找不到关于 JSTL forEach 标记实际工作方式的任何规范,所以我不确定如何实现它。

例如,如果我制作了一个通用的“ProjectSet”类并且我想在 JSP View 中使用以下标记:

<c:forEach items="${projectset}" var="project">
...
</c:forEach>

基础类文件:

public class ProjectSet {
    private ArrayList<Project> projects;
    public ProjectSet() {
        this.projects = new ArrayList<Project>();
    }
    // .. iteration methods ??
}

是否有任何接口(interface)必须实现,例如 PHP 的 ArrayAccessIterator 才能使其正常工作?

编辑:不直接访问 ArrayList 本身,因为我可能会使用某种使用泛型的 Set 类,而 JSP View 不必知道该类的内部工作。

最佳答案

Iterable 接口(interface)提供了这个功能:

public class ProjectSet implements Iterable<Project> {
    private ArrayList<Project> projects;
    public ProjectSet() {
        this.projects = new ArrayList<Project>();
    }

    // .. iteration methods ??
   @Override
   public Iterator<Project> iterator() {
       return projects.iterator();
   }
}

您可以根据需要交换迭代器逻辑。

关于java - JSTL - 使用 forEach 迭代用户定义的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978536/

相关文章:

java - 如何使用悲观锁定处理 Hibernate 中的 "StaleObjectStateException"?

java - 我想提高 xslt 的性能

java - 如何在我的操作中从 JSP 获取更新的列表值?

java - 在 JSTL/EL 中如何获取集合中的第一个元素?

jsp - fmt 标签的问题

java - 从另一个服务调用服务与 dao

java - Java中的隐式对象类型?

java - 滚动 ExpandableListView 后计数器的值发生变化

java - Action实例变量名与jsp标签的哪个属性匹配(id或name)?

java - jSTL taligb 中的 HTML5 data-* 属性