Vejo que o
name
, title
, status
e remarks
campo são todos String
(conforme seu comentário
) então no for
loop você deve lançar o Object
como uma String
e você não precisa dos quatro ArrayList
por esta. Veja como ficaria a tag de linha:
<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>
Pronto, isso deve funcionar.
Uma maneira mais limpa eu acho que seria ter um POJO definido que armazenasse esses valores e então a lista do POJO pudesse ser retornada. Eu não tentei a segunda abordagem embora.
Outra abordagem padrão é incluir campos extras em qualquer um dos campos
*Impl
da entidade e, em seguida, retornando a lista dessa entidade, no seu caso, suponho que você tenha Student
e Attendance
entidades, então você pode colocar os campos status
&remarks
em StudentImpl
e, em seguida, retornar um List<Student>
ou coloque fname
em AttendanceImpl
e retorne List<Attendance>
do método localizador. (atualizado após este comentário
)