Feb 7, 2011

Εμφάνιση δεδομένων ενός java.util.List σε μια ADF JSF σελίδα

Δουλεύοντας στην κατασκευή ενός προσαρμοσμένου Oracle BPM worklist application, έχουμε προσθέσει μια μέθοδο στο Application Module με το ακόλουθο signature:

public List getNotificationOutcomes(String notificationId);

Πρόκειται για μια συνάρτηση που επιστρέφει τις δυνατές ενέργειες που μπορούν να πραγματοποιηθούν σε ένα notification. Για παράδειγμα: Approve ή Reject. O τύπος των δεδομένων που περιλαμβάνει η λίστα είναι ο oracle.bpel.services.workflow.task.model.ActionType, που για την ακρίβεια πρόκειται για interface με δυο μεθόδους:

String getDisplayName();
String getAction();


Θέλοντας να εμφανίσουμε λοιπόν σε ένα μενού επιλογών ή σε μια σειρά κουμπιών τα στοιχεία αυτής της λίστας, ώστε ο χρήστης να αλληλεπιδράσει με το human task μας, μπορούμε να χρησιμοποιήσουμε το af:iterator component αφού στην αρχή κάνουμε drag-and-drop το return type του component μας στην σελίδα μας με την επιλογή εμφάνισης ως ADF read-only table. Παρατηρείστε πως η μεταβλητή των δεδομένων που επιστρέφει η function ονομάζεται ως element στα ADF bindings.

Έπειτα από αυτό, διαπιστώνουμε πως οι τιμές του table μας προέρχονται από ένα collection model που με τη σειρά του πηγάζει από τον τύπο return της συνάρτησής μας στο Application Module.

Αυτή είναι είναι ακριβώς και η μορφή των δεδομένων (collection model) που περιμένει ως είσοδο o af:iterator, που αποτελεί μια παραλλαγή του JSTL foreach tag. Σβήνουμε λοιπόν το af:table και προσθέτουμε το iterator component, για να παράγει για παράδειγμα menu list items.

<af:iterator value="#{bindings.return.collectionModel}" var="actionRow"
rows="#{bindings.return.rangeSize}" id="i1">
<af:commandMenuItem text="#{actionRow.element.displayName}" />
</af:iterator>

Αξίζει σε αυτό το σημείο να σημειωθεί πως "επίτηδες" ο τύπος των αποτελεσμάτων είναι List και όχι σε generic format, πχ List μιας και στον JDeveloper 11.1.1.3 προκύπτει ένα φοβερό μήνυμα του στυλ: MDS-01161: Reference "/java/util/List<...>" has an invalid character

No comments: