Виждам, че name
, title
, status
и remarks
всички полета са String
(според вашия коментар
), така че в for
цикъл трябва да изпълните Object
като String
и нямате нужда от четирите ArrayList
за това.
Ето как ще изглежда етикетът на реда:
<liferay-ui:search-container-row className="java.lang.Object" modelVar="search">
<%--
Since an "Object[]" is nothing but an "Object", we first cast the "search"
instance to an "Object[]" and then to a "String"
--%>
<liferay-ui:search-container-column-text name='name' value='<%= (String) ((Object[])search)[0] %>' />
<liferay-ui:search-container-column-text name='title' value='<%= (String) ((Object[])search)[1] %>' />
<liferay-ui:search-container-column-text name='status' value='<%= (String) ((Object[])search)[2] %>' />
<liferay-ui:search-container-column-text name='remarks' value='<%= (String) ((Object[])search)[3] %>' />
</liferay-ui:search-container-row>
Ето, това трябва да работи.
Мисля, че по-чист начин би бил дефинирането на POJO, което да съхранява тези стойности и след това списъкът на POJO може да бъде върнат. Все пак не съм пробвал втория подход.
Друг стандартен подход е да се включат допълнителни полета във всяко едно от *Impl
на обекта и след това връщане на списъка на този обект, във вашия случай бих предположил, че имате Student
и Attendance
обекти, така че можете да поставите полетата status
&remarks
в StudentImpl
и след това върне List<Student>
или поставете fname
в AttendanceImpl
и върне List<Attendance>
от метода на намиращия. (актуализирано след този коментар
)