表格内的ADF迭代

时间:2013-03-01 14:39:48

标签: oracle-adf

您好我有一个对象列表,而这些对象又包含一个列表。我想在表中迭代这些。这样的事情。

<af:table value="#{backingBeanScope.evaluateBackingBean.subjects}"
var="subject">

<af:forEach var="course" items="${subject.courses}">

<af:column sortable="false"
headerText="#{evaluategyansokanviewcontrollerBundle.SUBJECT}"
id="colSubject" width="200">
<af:outputText value="#{subject.name}"id="ot2"/>
</af:column>

<af:column sortable="false"
headerText="#{evaluategyansokanviewcontrollerBundle.COURSE}"
id="colCourse">
<af:outputText value="#{course.name}"id="ot3"/>
</af:column>

...

我知道这段代码不起作用,但只是想知道我想要什么。

此致 约翰内斯

3 个答案:

答案 0 :(得分:0)

对我而言,最简单的方法是在使用JSF进行渲染之前,先在Java中将其展平。那么你只需要在表中使用“普通”语法。所以也许是一个按主题列出的课程列表:

List<CourseBySubject> coursesBySubject;

public List<CourseBySubject> getCoursesBySubject() {
    if (coursesBySubject == null) {
        coursesBySubject = new ArrayList<Object>();
        Iterator<Subject> subjectIterator = subjects.iterator();
        while (subjectIterator.hasNext()) {
            Subject subject = subjectIterator.next();
            courses = subject.getCourses();
            Iterator<Course> courseIterator = courses.iterator();
            while (subjectIterator.hasNext()) {
                Course course = courseIterator.next();
                coursesBySubject.add(new CourseBySubject(subject.name, course.name));
            }
        }

    }
    return coursesBySubject;

}

答案 1 :(得分:0)

如果您正在寻找两层数据 - 意味着包含数据的数据或具有集合子集的集合,那么af:table实际上并不是理想的组件。

根据您想要实现的目标,您可能首先考虑其中一些问题:

  1. 行选择对您来说很重要吗?
  2. 这更像是UI布局(只读)与数据布局
  3. 如果你想要更多的UI布局,那么adf有两个组件可以满足您的需求:

    • AF:迭代
    • AF:的foreach

    两者都非常相似,只是af:foreach只支持List类型,而迭代器在使用bindings.data.collectionModel时会提供灵活性。

    还有一点值得一提的是af:foreach允许你有组件绑定,而af:iterator将代表节点,这意味着它生成的布局将只被视为服务器端的一个对象。

    我假设您正在寻找具有两个级别的基于表的数据,并且行选择对您很重要。在这种情况下,af:treetable是您最好的选择,因为您可以获得其他功能,例如父行的折叠/解折叠。

    如果您没有使用绑定collectionModel(dataControl模型) - 有些可能看起来有问题 - 那么请确保POJO集合为子集集提供访问器(setter)。

    例如

    public abstract class Foo {
        public abstract List<Country> getCountries();
    
        public static abstract class Country {
            public abstract List<City> getCities();
        }
    
        public static abstract class City {
        }
    }
    

    万一你想知道为什么你不能使用af:table主要是因为af:treeTable允许你选择父和子,事实上,你的bean甚至可以区分选择是否反对的区别父母与孩子。

    话虽如此,你也可以选择使用af:table并错过一些af:treeTable功能,可能依赖一些自定义属性来区分你选择的内容。

答案 2 :(得分:0)

你可以在af:table&gt;中使用af:table。 AF:列。最高支持ADF 11.1.1.6。