1

ユーザーデータを含むページのレンダリングに問題があります。

次のようなテンプレート .xhtml があります。

<h:body>
    <div id="page">

        <div id="content">
            <ui:insert name="content">Content</ui:insert>
        </div>          
        <div id="right_area">
            <ui:insert name="right_area">
                <ui:include src="../../user/showUser.xhtml" />
            </ui:insert>
        </div>
    </div>
</h:body>

showUser.xhtml には、更新したいユーザー データが表示されます

content divには、データを更新するためのコマンドボタンを備えたフォームがあります

<h:commandButton type="submit"
id="update" 
action="#{Bean.updateData}"
reRender="right_area">
</h:commandButton>

ボタンをクリックした後、データベースは更新されますが、「right_area」は再レンダリングされません。私も試しました:

<h:commandButton type="submit"
id="update" 
action="#{Bean.updateData}">
<a4j:ajax execute="update" render="right_area"/>
</h:commandButton>

エラーメッセージは表示されません 正しい方向を指し示す助けがあれば幸いです!

4

1 に答える 1

2

JSF で再レンダリングする場合は、プレーンなバニラ HTML 要素ではなく、完全な JSF コンポーネントを使用する必要があります。を使用<h:panelGroup layout="block">してレンダリングできます<div>

また、クライアント ID は、現在のネーミング コンテナー (<h:form>あなたの場合) に対して相対的に解釈されます。id="right_area"のコンテキスト内にあるコンポーネントを探していますが<h:form>、存在しません。代わりに絶対 ID を指定する必要があります。デフォルトの名前付けコンテナー区切り文字で始まる:ため、render=":right_area".

最後に、 には属性<h:commandButton>がありません。reRender古い RichFaces 3.x の と混同しています<a4j:commandButton><a4j:commandButton render>、または<f:ajax render>または<a4j:ajax render>代わりに使用する必要があります。

ということで、まとめて

<h:panelGroup id="right_area" layout="block">
    <ui:insert name="right_area">
        <ui:include src="../../user/showUser.xhtml" />
    </ui:insert>
</h:panelGroup>

<h:commandButton ...>
    <a4j:ajax execute="update" render=":right_area"/>
</h:commandButton>

すべきです。

于 2012-05-17T16:59:34.633 に答える