1

我有这个 div

<div id="name">
    ....
</div>

我还有一个按钮可以做到这一点:

<h:commandLink id="bttn" action="#">
    <f:ajax render="name"/>
</h:commandLink>

问题是在执行时,它说没有名为“名称”的组件。有没有一种方法可以使用 ajax 渲染 div而无需将其包含在 jsf 组件中

4

1 回答 1

5

不,没有办法。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>

也可以看看:

于 2013-09-12T16:07:00.357 回答