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
)