2

私は自分自身を説明しようとします:

Java、JSF 2.0、および RichFaces 4.2.1 を使用して JSF プロジェクトに取り組んでいます。

jsf にアクセスすると、検索フィルターと commandLink が読み込まれます。commandLink は、backingBean でメソッドを起動して、dataTable に表示されるデータをロードします。

<h:commandLink id="btnRecords">
    <f:ajax render="myCompAjax" event="click" listener="#{myBean.loadRecords}" />
    <h:graphicImage value="img/ico_new.gif" alt="#{bundle['button.search']}" />
</h:commandLink>

データテーブルは最初は表示されませんが、commandLink をクリックすると、backingBean のフラグが変更され、読み込んだデータでテーブルが表示されます。

<a4j:outputPanel ajaxRendered="true" id="myCompAjax">
    <h:dataTable id="recordsTable" value="#{myBean.records}"                   
     var="item" rendered="#{myBean.flagShowTable}">
        <h:column headerClass="thPijama" >
            <f:facet name="header">
                <table><tr class="thPijama"><td></td></tr></table>
            </f:facet>
            <h:commandLink action="#{myBean.goNextPage}">
                <h:outputText value="Go Next Page" />
                <h:inputHidden value="#{item}" />   
            </h:commandLink>                                                     
        </h:column>                   
    </h:dataTable>
</a4j:outputPanel>

問題は、dataTable 内の commandLink アクションがまったく機能していないことです。別のjsfに移動したいだけです。実際には、dataTable を非表示にし、フィルターを変更せずに残しています。アクション メソッドに到達できないままです。

もちろん、dataTable の外で同じ commandLink を設定すると機能します。

私が働いている人々がそれを承認していないので、私はSession Scope Beansを使用できません。

誰でも私を助けることができますか?

ヒントをありがとう。

4

1 に答える 1

3

私が働いている人々がそれを承認していないので、私はSession Scope Beansを使用できません。

Bean をリクエスト スコープではなくセッション スコープに配置することで実際に問題が解決したことを暗示していますか? その場合は、Bean をビュー スコープに入れるだけです。

@ManagedBean
@ViewScoped
public class MyBean implements Serializable {
    // ...
}

この方法では、ajax リクエストによって同じビューを操作している限り、Bean は存続します。Bean は、同じセッション内の他のブラウザー タブ/ウィンドウで共有されていません(これは、アーキテクトの間で、単純なビューの場合にその使用を禁止する主な理由です)。

以下も参照してください。

于 2012-11-07T17:05:19.183 に答える