2013-03-01 32 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。