2017-11-17 3 views
1

私が理解する限り、f:ajaxタグのexecuteにIDを指定すると、サーバーに送信されるフィールドが制限されます。実行中の特定のIDを持つAjax依頼は、依然としてフォーム全体を送信します

<h:form> 
     <h:inputText id="one" value="#{manageSettingsBean.testOne}"/> 
     <h:inputText id="two" value="#{manageSettingsBean.testTwo}"/> 

     <h:commandButton value="Multi test" action="#{maintainEntityAction.multi(manageSettingsBean.testOne, manageSettingsBean.testTwo)}"> 
      <f:ajax execute="@this one"/> 
     </h:commandButton> 
    </h:form> 

この場合、最初のinputTextのみが送信されると考えられます。 Chromeのネットワークタブでフォームのデータを調べるには

は、しかし、私は("One""Two"の)そのデフォルト値と、両方のコンポーネントが含まれてい

j_idt13=j_idt13&j_idt13%3Aone=One&j_idt13%3Atwo=Two&javax.faces.ViewState=-8624538035389330252%3A2147742525648157763&javax.faces.source=j_idt13%3Aj_idt14&javax.faces.partial.event=click&javax.faces.partial.execute=j_idt13%3Aj_idt14%20j_idt13%3Aone&javax.faces.behavior.event=action&javax.faces.partial.ajax=true

を参照してください。

j_idt13:one=One 
j_idt13:two=Two 

第一成分はjavax.faces.partial.executeに指定されているので、更新された唯一のものですが、両方のフィールドが提出されているように見えるん。あまりにも多くのデータをポストするのを避けるために、私は部分的な提出を大きなフォームの一部としてやっていますが、フォーム全体がまだ提出されていれば利益は失われているように見えますか?

答えて

1

execute属性は、フィールドの送信とは関係ありません。サーバー上の処理に影響を与えます。だからこそあなたの期待は間違っていて、すべてが期待どおりに動作します。

PrimeFacesは、実際に提出される内容を制限するためにpartialSubmitのアトリビュート(対応するものはexecute)を使用しています。これに基づき

は、私も、私はOmniFaces o:formに同じ機能を追加するためにfeature request to OmniFacesを提出したと同時に、普通のJSFでこの作品を作る別の質問<f:ajax render="@none" execute="@this"> and reducing submitted post data size in large formのためのいくつかのコードを作成しました。彼らはそれを少し改良して、あなたがすでに試してみることができる次回のリリースに追加しました。3.0-SNAPSHOT

+0

素晴らしい、ありがとう。 OmnifacesはJBoss EAP6のモジュール構造と完全に互換性がないため、その方法はありませんが、単純なJSFを試してみましょう。 –

関連する問題