4

この wikiに従って、カスタム クエリを作成しました。

それは正常に動作します。テーブル間の結合を使用しました。

私の質問は、検索コンテナのclassNameが1つのモデルクラスを必要とするため、liferay検索コンテナを使用してjspに表示する方法です。

編集:
私が今まで試したことはこれです:

<%

getAttendanceData attName = new getAttendanceData();
List<Object[]> displayAttListName = AttendanceLocalServiceUtil.findAttendance();

ArrayList name = new ArrayList();
ArrayList title = new ArrayList();
ArrayList status = new ArrayList();
ArrayList remarks = new ArrayList();

for(Object[] att:displayAttListName) {

    name.add(att[0]);
    title.add(att[1]);
    status.add(att[2]);
    remarks.add(att[3]);
}

%>

<liferay-ui:search-container delta="20" emptyResultsMessage="No Results Found">
    <liferay-ui:search-container-results
            total="<%= displayAttListName.size() %>"
            results="<%= ListUtil.subList(displayAttListName , searchContainer.getStart(), searchContainer.getEnd()) %>"
        />

    <liferay-ui:search-container-row modelVar="search"
        className="java.lang.Object">


    <%
    for(Object displayName:name) {
    %>

        <liferay-ui:search-container-column-text name='studName' value = '<%=String.valueOf(displayName)%>' href="">

        </liferay-ui:search-container-column-text>
    <%
    }
    %> 

    </liferay-ui:search-container-row>
    <liferay-ui:search-iterator/>
</liferay-ui:search-container>  

上記で行ったことは、10 個の名前のそれぞれを列に 10 回表示します。
新しい行ごとに名前を表示したい。上記のコードをどのように変更すればよいですか?

EDIT 2
配列が以前に定義されていることを 考慮nameして、次のことを行いました。

<liferay-ui:search-container-column-text name="employee name" href = "">

    <%=name.getClass().getDeclaredFields().toString() %>

</liferay-ui:search-container-column-text>

上記で、次のような結果が得[Ljava.lang.reflect.Field;@195f1afられます。各行で。

4

1 に答える 1

3

nametitleおよびフィールドはすべて(コメントに従って)であるため、statusループではを a としてキャストする必要があり、これには4つ必要ありません。remarksStringforObjectStringArrayList

行タグは次のようになります。

<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 のリストを返すことができるようにすることです。ただし、2番目のアプローチは試していません。

もう1つの標準的なアプローチは、エンティティのいずれかに追加のフィールドを含めてから、そのエンティティのリストを返すことです*Impl.あなたの場合、私はあなたがエンティティを持っているStudentと仮定します. finder メソッドから戻ります。(このコメントの後に更新)AttendancestatusremarksStudentImplList<Student>fnameAttendanceImplList<Attendance>

于 2013-05-23T15:45:01.093 に答える