3

JSF、AJAX、JavaScript のメッシュ化に苦労しています。これが私がやろうとしていることです:

ユーザーがフォームを送信すると、新しいページが表示されます。このページは最初に、送信が処理されたかどうかを確認し、処理されていない場合は進行状況バーを表示します ( Twitter Bootstrapを参照)。次に、f:ajax を使用して、処理が完了したかどうかを確認します。waitForProcessingメソッドが呼び出されます。処理が true に設定されるまで待機し、その後 true を返します。この時点で、f:ajax は JavaScript を呼び出してプログレス バーを非表示に設定し、ページを更新する必要があります。コードは次のとおりです。

<ui:define name="content">

        <c:choose>
            <c:when test="#{not submission.isIsProcessed}">
                <f:ajax onevent="setVisibility('processing-dialog', 'none'); setVisibility('processing-backdrop', 'none');" listener="#{submission.waitForProcessing}" status="success" />

                <div class="modal-backdrop fade in" id="processing-backdrop"></div>
                <div id="processing-dialog" class="modal hide fade in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false" style="display: block;">
                    <div class="modal-header">
                        <h3 id="myModalLabel">One sec...</h3>
                    </div>
                    <div class="modal-body">
                        <p>We are compiling and running your code!</p>
                        <div class="progress progress-striped active">
                            <div class="bar" style="width: 40%;"></div>
                        </div>
                    </div>
                </div>
            </c:when>
        </c:choose>
.......
.......

ここでは多くのことが機能していません。まず、明らかに f:ajax は特定のコンポーネントでのみネストできるため、f:ajax は例外をスローします。これを行うより良い方法はありますか?目標は、バックエンド処理が完了するまで進行状況バーを表示することです。この処理には数分かかる可能性があります。そのため、データの準備が整うまで、ページが自動的に読み込まれないという問題を抱えています。

4

1 に答える 1

0

あなたの問題は、f:ajaxが1回しか実行しないことです。同じ ajax 呼び出しを複数回実行する場合は、PrimeFaces、RichFaces などのフレームワークでのみ使用できるpollコンポーネントを使用する必要があります。RichFaces には、説明どおりに機能するコンポーネントがあります (内部でポーリングを使用します)。ここで確認できます: RichFaces Progress Bar

于 2013-04-30T09:11:54.407 に答える