如何在模板xhtml页面中重新渲染div

时间:2012-05-17 16:51:09

标签: ajax jsf richfaces

我在使用userdata渲染页面时遇到问题。

有一个模板.xhtml whitch看起来像这样:

<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>

我没有收到任何错误消息 任何指向正确方向的帮助都值得赞赏!

1 个答案:

答案 0 :(得分:2)

如果您想要通过JSF重新呈现它,则需要使用一个值得一提的JSF组件而不是一个简单的vanilla 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>,或<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>

应该这样做。

相关问题