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 显示了一些我想更新的用户数据

在内容 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 重新渲染它,你需要使用一个完整的 JSF 组件而不是一个普通的 HTML 元素。你可以<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>, or <f:ajax render>or<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 回答