2009-07-20 4 views
0

がうまくいけば、タイトルはJSFループ再レンダリング

私たちが持っている問題は、我々はいくつかのJava一覧から入力コントロール(h:inputOneMenuh:inputTextなど)の束を生成することです...あまりにも不可解ではありません。

これらの入力がオンザフライで検証されることを除いては、正常に動作します。ループ内でコントロールが生成されたため、reRenderアクションは基本的にフォーム全体またはa4j:outputPanelという基本的に同じループ反復の周りにあります。

上記の2つのソリューションは技術的には機能しますが、すべてのページコントロールを再レンダリングするという厄介な副作用があり、ページが本当に厄介で不器用なように感じます。これを止めたいので、reRenderedを取得する唯一のコントロールは、ajaxの更新/検証を送信するコントロールです。

基本的にこれは、私たちのページのコードです:

<ui:repeat value="#{seam-outjected-list}" var="item"> 
    <a4j:outputPanel selfRendered="true"> 
     <h:inputText value=#{item.value}> 
     <a4j:support event="onblur" ajaxSingle="true" /> 
     </h:inputText> 
    </a4j:outputPanel> 
</ui:repeat> 

私はちょうど項目に応じて、異なるコントロールをレンダリングするもののビットを残してきました。

私たちは現在、a4j:outputPanelソリューションを使用しているので、ループ生成コントロールが更新されるたびにすべてのコントロールが再レンダリングされます。

誰もが考えている場合は、事前におかげで。

答えて

1

<ui:repeat><a4j:repeat>に置き換えて、ajaxKeys属性を利用して特定の行のみを再レンダリングするようにしてください。 Richfaces Docsから

他 ライブラリの反復コンポーネントからこのコンポーネント の主な違いは、特別な「ajaxKeys」 属性です。この属性は、 のAjax要求の後に更新される行 を定義します。その結果、 ページ全体を更新することなく、 を複数の子コンポーネント を個別に更新することが容易になります。

関連する問題