0

您好,我有一个对象列表,其中又包含一个列表。我想在表格中迭代这些。像这样的东西。

<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>

...

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

问候约翰内斯

4

3 回答 3

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;

}
于 2013-03-12T16:59:49.550 回答
0

You can use an af:table within an af:table > af:column. Supported upto ADF 11.1.1.6 though.

于 2014-01-21T16:13:03.327 回答
0

如果您正在寻找两层数据——即带有数据的数据或带有集合子集的集合,那么 af:table 并不是真正适合使用的组件。

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

  1. 行选择对您来说重要吗?
  2. 这更像是 UI 布局(只读)还是数据布局

如果您更倾向于 UI 布局,那么 adf 有两个组件可以很好地满足您的需求:

  • af:迭代器
  • af:foreach

两者都非常相似,除了 af:foreach 仅支持 List 类型,而迭代器将在与 bindings.data.collectionModel 一起使用时提供灵活性。

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

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

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

例如。

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 功能,并且可能依赖一些自定义属性来区分您选择的内容。

于 2013-04-07T18:32:29.803 回答