15

JSFコンポーネントではないページの一部を更新することは可能ですか?

たとえば、プレーンHTMLを更新できます<div>か、それともJSFコンポーネントでラップする必要がありますか?

4

3 に答える 3

33

JSFコンポーネントではないページの一部を更新することは可能ですか?

いいえ。更新されるコンポーネントは、によって利用可能である必要がありますUIViewRoot#findComponent()。これにより、JSFはコンポーネントを見つけて呼び出しencodeAll()、生成されたHTML出力をキャプチャして、JavaScriptがHTMLDOMツリーを更新できるようにajax応答に返します。 。UIComponentプレーンなHTML要素はJSFコンポーネントツリーでは実際のインスタンスとして表されないため、JSFはそれらを最初から見つけることができません。


たとえば、プレーンHTMLを更新できます<div>か、それともJSFコンポーネントでラップする必要がありますか?

のようなJSFコンポーネントでラップする必要があります<h:panelGroup>。ただし、JSF<h:panelGroup layout="block">で実数を表すために使用することもできます。このように、別のJSFコンポーネントで<div>ラップする必要はありません。<div>

<h:panelGroup layout="block" id="foo">
    ...
</h:panelGroup>

JSF 2.2以降では、属性を持つ新しいパススルー要素機能を使用jsf:idして、HTML(5)要素をJSFコンポーネントとして宣言できます。

<... xmlns:jsf="http://xmlns.jcp.org/jsf">

<div jsf:id="foo">
    ...
</div>
<main jsf:id="bar">
    ...
</main>
<section jsf:id="baz">
    ...
</section>

それらは出力をそのままレンダリングしますが、カバーの下には具体的なUIPanelインスタンスがあります。

ただし、複合コンポーネントの場合は1つのコーナーケースがあります。次のアプローチを使用して、 ajax更新可能なHTML要素を作成できます。

<cc:implementation>
    <span id="#{cc.clientId}">
        ...
    </span>
</cc:implementation>

このアプローチが機能するという説明は、複合コンポーネントがそれ自体をHTML出力にレンダリングしない場合でも、それ自体によって利用可能であるためですUIViewRoot#findComponent()

参照:

于 2012-10-22T12:55:48.467 に答える
1

できないようです。

何かを更新するには、それを「更新可能な」コンポーネント(primeaces p:outputpanel内)にラップして、それを更新します。

追加:特別な場合には、p:treeの子を次のように更新できます:JSFはprimefacesツリーの子を更新します

(笑はいつも第三者で私と話したいと思っていました)

于 2012-10-22T11:48:42.307 に答える
-2

AFAIKは、コンポーネントをIDで更新します。通常の要素は、IDを持つことができるため、IDを正しく取得している限り可能であるはずです;-)

于 2012-10-22T10:14:09.707 に答える