我有这个 div
<div id="name">
....
</div>
我还有一个按钮可以做到这一点:
<h:commandLink id="bttn" action="#">
<f:ajax render="name"/>
</h:commandLink>
问题是在执行时,它说没有名为“名称”的组件。有没有一种方法可以使用 ajax 渲染 div而无需将其包含在 jsf 组件中?
不,没有办法。Ajax 渲染在 JSF 的引擎盖下大致如下工作:
for (String clientIdToRender : clientIdsToRender) {
UIComponent componentToRender = viewRoot.findComponent(clientIdToRender);
// ...
}
但是,由于纯 HTML<div>
不是由 提供的完全有价值的 JSF 组件UIViewRoot#findComponent()
,因此 JSF 找不到任何东西来生成更新的 HTML 输出。
您不一定需要将它包装在另一个 JSF 组件中,您也可以只使用已经生成 HTML<div>
元素的 JSF 组件。这是<h:panelGroup>
其layout
属性设置为的组件block
(如“渲染块级元素”)。
<h:panelGroup layout="block" id="name">
...
</h:panelGroup>