栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过Ajax渲染复合组件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过Ajax渲染复合组件

这个问题实际上有两个方面。

第一个问题是,

<xyz:comp id>
实际上指定复合部件的ID 本身
<cc:implementation>
。默认情况下,HTML输出中不显示该位置,因此ajax /
Javascript不能被
document.getElementById()
and friends 找到。

实际上,

<h:panelGroup id="#{cc.attrs.id}">
最终您会生成如下所示的HTML输出(右键单击页面和“ 查看源代码”
以自己 查看 ):

<span id="idMyComponent:idMyComponent">

第二个“问题”是RichFaces / Ajax4jsf

:
不仅通过在当前上下文中进行搜索
NamingContainer
,还通过在所有其他
NamingContainer
组件中进行搜索,从而通过相对客户端ID(即,不以开头)增强了树中JSF组件的引用/查找。复合组件固有地也是
NamingContainer
组件。

您的第一次尝试失败了,因为它找到了组合本身而不是面板组,但是JS /
ajax却又未能更新,因为

id="myComponent"
在生成的HTML输出中不存在任何HTML元素。

您的第二次尝试成功了,因为它最终找到了真正的面板组(注意:因为它也在所有其他

NamingContainer
组件中进行了搜索;如果您使用
<f:ajax>
代替,这仍然会失败
<a4j:ajax>
)。

解决问题的正确方法不是

#{cc.attrs.id}
在JSF组件上使用,而是
#{cc.clientId}
在纯HTML元素上使用。

<span id="#{cc.clientId}">

(是的,使用一个

<span>
<div>
代替
<h:panelGroup>
内部的
<cc:implementation>

这样,JSF可以通过客户端ID找到组件(以便生成正确的ajax响应),
JS可以通过客户端ID找到HTML元素(以便基于ajax响应更新正确的HTML元素)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号