【问题标题】:ADF Iteration inside table表内的 ADF 迭代
【发布时间】:2013-03-01 14:39:48
【问题描述】:

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

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

...

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

问候 约翰内斯

【问题讨论】:

    标签: oracle-adf


    【解决方案1】:

    对我来说,最简单的做法是在使用 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;
    
    }
    

    【讨论】:

      【解决方案2】:

      如果您正在寻找两层数据 - 即带有数据的数据或带有集合子集的集合,那么 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 功能,并且可能依赖一些自定义属性来区分您选择的内容。

      【讨论】:

        【解决方案3】:

        您可以在 af:table > af:column 中使用 af:table。最高支持 ADF 11.1.1.6。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-25
          • 1970-01-01
          • 2017-11-11
          • 1970-01-01
          • 1970-01-01
          • 2019-07-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多