我在使用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>
我没有收到任何错误消息 任何指向正确方向的帮助都值得赞赏!
答案 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>
应该这样做。