2

こんにちは、

ページを更新せずに ajax を使用して複数のデータテーブルをレンダリングする検索ページがあります。各テーブルのリスナーとしてメソッドを呼び出すことは必須です。以下は、正常に動作する最初のデータテーブルのスニペットです。

#{evalController.prepareList}2 番目のデータテーブルをレンダリングするには、メソッドを ajax のリスナーとして呼び出す必要があります。問題は、<f:ajax 「リスナー」属性が複数のメソッドを取らないことです。

したがって、残りの方法は、<f:ajax何度か呼び出し、毎回異なるリスナーを使用することですが、これは機能しません。これを達成する方法はありますか?そうでない場合、必要なすべてのメソッドを呼び出し、それを 1 つのリスナーとして使用するマネージド Bean にメソッドを作成する必要がありますか? よろしくお願いします。

<h:form id="searchform">

                <h:panelGrid columns="3" >
                    <p:inputText value="#{ddnController.patientID}" id="pidinput"   maxlength="7" size="7">
                        <f:ajax execute="@this" event="keyup" render="searchbutton ddntable" listener="#{ddnController.prepareList}"/>

                    </p:inputText>

                    <h:commandButton  image="#{resource['images/search.png']}" id="searchbutton" value="#{bundle.Search}" 
                                      action="submit" actionListener="#{ddnController.prepareList}" 
                                      disabled="#{empty ddnController.patientID or ddnController.patientID.equals('0')}"/>
                    <p:panel><h:outputText value="Saisir 0 pour avoir tous les Patients" style="font-style: italic;"/></p:panel>
                </h:panelGrid>

                <p:dataTable id="ddntable" value="#{ddnController.items}" var="ddn" rendered="#{!empty ddnController.items}" paginator="true" >....

byte[] を Base64 としてエンコードします。Base64 は、バイナリ データを ASCII 文字列として表すために使用されます。

http://msdn.microsoft.com/en-us/library/dhx0d524.aspx

4

1 に答える 1

0

複合メソッドが呼び出されたときに効果がない理由はまだわかりません。おそらく、適切なフェーズの前または後の間に呼び出されません(後でプロファイリングします)。とにかく、私は2つのエッジを持つ解決策を見つけました(それは私の問題を解決していますが、ajaxの使用を犠牲にします):

したがって、各マネージドBeanから、リスナーとして使用するメソッド(prepareList())を呼び出す代わりに、次のようにします。

   private DataModel items = null; // Getter to retrieve items
    // ......
    public String prepareList() {
    recreatemodel();
    return "List";
    } 
private void recreatemodel(){
items=null;
}

(ちなみに、このメソッドはデータモデルをNULL更新するように設定します。これが私のデータテーブルを更新する方法です)。コマンドボタンの中に、プロパティアクションリスナーをネストしました。

<h:commandButton image="#{resource['images/search.png']}" id="searchbutton" value="#{bundle.Search}" 
                                      action="submit" 
                                      disabled="#{empty ddnController.patientID or ddnController.patientID.equals('0')}">

<f:PropertyActionListener target="#{ddnController.items}" value="#{null}" />
<f:PropertyActionListener target="#{evalController.items}" value="#{null}" />
<f:PropertyActionListener target="#{corController.items}" value="#{null}" />
<!--...etc -->

</h:commandButton>

<f:PropertyActionListener />中に入れ子にできたらいいのに<h:ajax/>.

誰かがプロパティアクションリスナーajaxを使用して、ボタンでフォームを送信しないようにするソリューションを持っている場合は、その人を歓迎します。その後、受け入れられたとおりに彼/彼女の答えを出します。

于 2011-06-23T21:17:46.350 に答える