我有这个div
<div id="name">
....
</div>
我也有一个按钮来执行此操作:
<h:commandLink id="bttn" action="#">
<f:ajax render="name"/>
</h:commandLink>
问题在于,在执行时,它表示没有名为“name”的组件。有没有办法可以使用ajax 渲染div而不将其封装在jsf组件中?
答案 0 :(得分:5)
不,没有办法。在JSF的引擎盖下,Ajax渲染大致如下:
for (String clientIdToRender : clientIdsToRender) {
UIComponent componentToRender = viewRoot.findComponent(clientIdToRender);
// ...
}
但是,由于普通HTML <div>
不是UIViewRoot#findComponent()
提供的完全可用的JSF组件,因此JSF无法找到任何内容来生成更新的HTML输出。
您不一定需要将其包装在另一个JSF组件中,您也可以只使用一个生成HTML <div>
元素的JSF组件。这是<h:panelGroup>
组件,其layout
属性设置为block
(例如,“渲染block level元素”)。
<h:panelGroup layout="block" id="name">
...
</h:panelGroup>