2013-03-01 55 views
0

您好,我有一个对象列表,其中包含一个列表。我想在表中迭代这些。像这样的东西。表中的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> 

...

我知道这个代码不工作,但它只是给我想要的东西的想法。

问候 约翰内斯

回答

0

要我做将是最简单的事情你能在JSF渲染之前在Java中其实拉平了这一点。那么你只需要在表格中使用“正常”语法。因此,也许一个按主题课程的ArrayList:

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; 

} 
0

如果您正在寻找两层数据 - 这意味着有数据的数据或集合的子集,然后自动对焦的集合:表不会真的是使用的理想组件。

取决于你想要达到的目标,你可能会考虑瓦纳一些问题第一:

  1. 是行选择对你很重要?
  2. 这是更多的是UI布局(只读)对数据布局

的如果你要更多的UI布局,然后ADF有两个组成部分,将与你所需要的顺利:

  • AF:迭代器
  • AF:的foreach

两者都是除了AF颇为相似:的foreach仅支持列表类型的同时,迭代器将提供灵活性w ^例如,使用binds.data.collectionModel。

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

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

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

例如,

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:表主要是因为AF:treetable中让你俩的父母子女,实际上的选择,你的bean甚至可以区分如果差选择是针对父母对孩子的。这样说的话,你也可以选择使用af:table并且放弃一些af:treeTable特性,并且可能依靠一些自定义属性来区分你正在选择的内容。

0

您可以在af:table> af:列中使用af:表。尽管支持ADF 11.1.1.6。