2017-05-05 28 views
1

PrimeFaces 5.0、ページのロード時に呼び出されるメソッドをバックアップonCompleteの私は、セットアップ中に何かが正しく設定されていないが、私はよく分からないことを仮定してい JSF 2.2、 Glassfishの4.1.1、PrimeFacesは

ものにご覧ください...

私はmanagedbeansを使用してJSFページを取り戻しています。私がoncompleteプロパティを使用する場合、ページのPrimeFace要素内では、それが参照するメソッドがページの読み込みで呼び出されます。私はそれが各ページの負荷のメソッドを呼び出すと私はそれがすべきだとは思わない!

私はいくつかのページとさまざまな要素でこれをテストしました。 私は最初に、すべてのファイルがアップロードされたら、oncompleteを使ってメソッドを呼び出そうとしていた<p:fileupload>要素でこの問題に気付きました。 私はその後、<p:commandbuttons>でこれを試して、ページがロードされるとoncompleteが呼び出されます。

結果のHTMLをチェックしました。正しくフォーマットされた<head>タグペアがあります。

また、oncompleteプロパティの有無にかかわらず、生成されたHTMLのdiffを完成させました。

<button id="j_idt21:j_idt26" 
    name="j_idt21:j_idt26" 
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
    onclick="PrimeFaces.ab({s:'j_idt21:j_idt26',onco:function(xhr,status,args){;}}); 
    return false;" 
    type="submit">` 

なし::付き

ここ

<button id="j_idt21:j_idt26" 
    name="j_idt21:j_idt26" 
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
    onclick="PrimeFaces.ab({s:'j_idt21:j_idt26'}); 
    return false;" 
    type="submit"> 

は、それがロードされたときonCompleteのは、任意のページのメソッドを呼び出すことを示す上記のHTMLのコードです。これは私のログインページです。

<p:commandButton validateClient="true" value="Login" 
    action="#{loginJSFManagedBean.validateCredentials}" 
    type="submit" 
    ajax="true" 
    oncomplete="#{loginJSFManagedBean.validateCredentials}"> 
</p:commandButton> 

ログインページがvalidateCredentials方法は、ページがレンダリングを終了する前であっても、呼び出されたロードされるたびに...ここ

は、私のファイルアップロードのための私のJSFの抜粋です:

<h:form enctype="multipart/form-data"> 
<p:fileUpload oncomplete="#{JSFManagedBean.extract()}" 
fileUploadListener="#{JSFManagedBean.handleTarFileUpload}" 
mode="advanced" ></p:fileUpload> 
</h:form> 

ページがextract()メソッドを読み込むたびに...

+1

ドキュメントでは、「完了」したときに「オンコンプリート」がjavaサーバーサイドメソッドを呼び出すことができると述べていますか? – Kukeltje

+0

[onclickイベントが発生した場合のみJSFバッキングBeanメソッドを呼び出す方法](http://stackoverflow.com/questions/8705614/how-to-call-jsf-backing-bean-method-only-when-onclick -event-occurs) – Kukeltje

+0

ボタンで何をしようとしているのかは、最初のactionListenerとそれに続くアクションです。ファイルアップロードの場合は、http://stackoverflow.com/questions/26696922/finish-uploading-files-and-then-execute-the-jsfaction-of-the-buttonまたはhttp://stackoverflow.com/questions/を実行できます。 20747201 /複数アップロードが完了した時点でのファイルアップロード –

答えて

1

oncompleteはクライアントサイドのJavaScriptコールバックです。あなたのメソッドは、ページがレンダリングされるときに呼び出されます。なぜなら、サーバーは、送信するJavaScriptコードを含む文字列を返すようなEL式を評価するからです。

おそらく、これらの完了していないハンドラはまったく必要ありません。ログインボタンの場合は、アクションハンドラで十分です。メソッド名が示すようにアップロードされたファイルを "抽出"するだけであれば、fileUploadの場合はfileUploadListenerで十分です。

+0

これに関する多くの「重複」があり、私も参照しています。StackOverflowのはほぼ同じ答えが散らばっされることはありませんので、次に、それを複製して、この質問をマークするために練習をgopdされます – Kukeltje