Ajaxは、フォーム全体ではなく入力のみをレンダリングする方法ですか?

StackOverflow https://stackoverflow.com/questions/7808858

  •  26-10-2019
  •  | 
  •  

質問

JSF 2.0には、多くのテキスト(ラベル)とチェックボックスを備えたフォームがあります。テキストは送信時に更新されることはありませんが、チェックボックスの値は行われます。

例えば:

<h:form>

  <h:outputLabel value="bla bla bla bla .. X 1000" id="lab1">
  <h:selectBooleanCheckbox for="lab1">

  <h:outputLabel value="bla bla bla bla .. X 1000" id="lab2">
  <h:selectBooleanCheckbox for="lab2">

  .... many more labels and checkboxes ...

  <h:commandButton>
      <f:ajax render="@form" execute="@form" />
  </h:commandButton>     

</h:form>

問題は、提出するたびに、フォームコンテンツ全体が再レンダリングされることです。チェックボックスの値だけを再レンダリングしたいと思います。これにより、リクエストサイズの90%を節約できます。

この問題の良い解決策はありますか?

役に立ちましたか?

解決

render 属性は、複数のコンポーネントIDのスペース分離された文字列を受け入れます。目的の入力のコンポーネントIDを指定できます render 全体の代わりに属性 @form.

あなたのビューマークアップは無効です(あなたが混乱したラベルのように見えます for 入力付き id)、しかし、点までは次のようになります。

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab1">
<h:selectBooleanCheckbox id="lab1">

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab2">
<h:selectBooleanCheckbox id="lab2">

.... many more labels and checkboxes ...

<h:commandButton>
    <f:ajax execute="@form" render="lab1 lab2 lab3 lab4 ..." />
</h:commandButton>     

EL式も受け入れていることに注意してください。これが動的に生成されたフォームおよび/またはIDとチェックボックスの数がBeanで事前に知られている場合、次のようなものを使用できるはずです。

    <f:ajax execute="@form" render="#{bean.allCheckboxIds}" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top