2

データテーブル内のJSFcommandLinkに問題があります。動作させることができません。

Beanはリクエストスコープにあり、アクションクラスもリクエストスコープにあります。これが私のデータテーブルです:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view contentType="text/html">
    <ui:include src="../blocks/head.xhtml"/>

    <body>
    <ui:include src="../blocks/header.xhtml"/>

    <div class="content_table" align="center">

        <h:dataTable headerClass="data_table_header"
                     cellpadding="10"
                     rowClasses="dataTableRow1,dataTableRow2"
                     value="#{searchBean.searchResult.corpusInfos}"
                     var="corpusInfo">

            <h:column>
                <f:facet name="header">
                    #{msg['application.corpusInfoTable.corpusPart']}
                </f:facet>
                #{corpusInfo.corpusPart}
            </h:column>

            <h:column>
                <f:facet name="header">
                    #{msg['application.corpusInfoTable.totalWords']}
                </f:facet>
                #{corpusInfo.allWordsCount}
            </h:column>

            <h:column>
                <f:facet name="header">
                    #{msg['application.corpusInfoTable.request']}
                </f:facet>

                <h:form id="idSimpleSearchForm">
                    <h:commandLink id="idSimpleSearchFromTable" action="#{searchAction.processSearch}"
                                   value="#{corpusInfo.searchTerm}">
                        <f:setPropertyActionListener value="50" target="#{searchBean.lineLength}"/>
                        <f:setPropertyActionListener value="simpleSearch" target="#{searchBean.searchType}"/>
                        <f:ajax execute="@form"/>
                    </h:commandLink>
                </h:form>

            </h:column>

            <h:column>
                <f:facet name="header">
                    #{msg['application.corpusInfoTable.usageNumber']}
                </f:facet>
                #{corpusInfo.usageCount}
            </h:column>

            <h:column>
                <f:facet name="header">
                    #{msg['application.corpusInfoTable.analyzedSourcesCount']}
                </f:facet>
                #{corpusInfo.analyzedSourcesCount}
            </h:column>

        </h:dataTable>

    </div>

    <ui:include src="../blocks/footer.xhtml"/>
    </body>
</f:view>
</HTML>

アクションクラスとBeanのスコープをセッションまたはビューに変更しようとしました。失敗。生成されたリンクをクリックすると、ページが更新されます。

このテーブルは、以前のリクエストから生成されます。最初のページにはいくつかのフィールドとアクションボタンが含まれています。アクションボタンがクリックされると、アクションクラスに到達すると、必要なデータがBeanクラスに設定され、このデータテーブルがある次のxhtmlページに渡されます。テーブルのすべての値が正しい順序で表示されます。アクションリンクを除いてすべて問題ありません。

これを解決する方法について何かアイデアはありますか?

編集:

データテーブルがあるすべてのページを入れました。たぶん他のタグに何か問題がありますか?多分彼らは見方を変えますか?このページへのナビゲーションは、次のようにfaces-config.xmlファイルに書き込まれます。

<navigation-rule>
    <navigation-case>
        <from-action>#{searchAction.processSearch}</from-action>
        <from-outcome>success_simple_search</from-outcome>
        <to-view-id>/views/concordance/concordance.xhtml</to-view-id>
    </navigation-case>

    <navigation-case>
        <from-action>#{searchAction.processSearch}</from-action>
        <from-outcome>failure</from-outcome>
        <to-view-id>/views/error/unexpectedError.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
4

1 に答える 1

3

#{searchBean.searchResult.corpusInfos}これは、フォーム送信の処理中に がフォームを含むページを表示したときと同じリストを返さない場合に発生する可能性があります。

#{searchBean}リストがビューに保持されるようにするには、 をビュー スコープに入れる必要があります。

@ManagedBean
@ViewScoped
public class SearchBean {}

#{searchBean.searchResult}およびのゲッター メソッドでビジネス ロジックを実行していないことを確認する必要があります#{searchBean.searchResult.corpusInfos}。したがって、彼らは単にこのように見えるはずです

public SearchResult getSearchResult() {
    return searchResult;
}

public List<CorpusInfo> getCorpusInfos() {
    return corpusInfos;
}

最初のリクエストまたはアクションに基づいてそれらをプリロード/プリフィルする必要がある場合は、代わりに (ポスト) コンストラクターまたはアクション (リスナー) メソッドでビジネス ジョブを実行する必要があります。

こちらもご覧ください

于 2012-05-04T19:21:02.573 に答える