JSF:Ajax重新渲染器复合组件
我已经读了很多帖子试图解决我的问题,但没有人能帮我。。。 所以我在这里问,如果我做错了什么,是否有人能告诉我: 我有一个JSF复合组件a,我用另一个复合组件B的ID传递一个自定义属性值。每当我更改组件a上的内容时,组件B都应该使用a4j:ajax函数重新呈现 这很好用 但是,现在我需要组件B最初使用依赖于某个托管bean MB的EL表达式呈现,如下所示:JSF:Ajax重新渲染器复合组件,ajax,jsf,richfaces,components,composite,Ajax,Jsf,Richfaces,Components,Composite,我已经读了很多帖子试图解决我的问题,但没有人能帮我。。。 所以我在这里问,如果我做错了什么,是否有人能告诉我: 我有一个JSF复合组件a,我用另一个复合组件B的ID传递一个自定义属性值。每当我更改组件a上的内容时,组件B都应该使用a4j:ajax函数重新呈现 这很好用 但是,现在我需要组件B最初使用依赖于某个托管bean MB的EL表达式呈现,如下所示: <mycomp:B id="comp-b" rendered="#{MB.value gt 0}"> 在MB的构造函数上,值
<mycomp:B id="comp-b" rendered="#{MB.value gt 0}">
在MB的构造函数上,值设置为0。
正如所料,在第一次访问页面时,组件B不会呈现
问题:
在组件A上选择某个值时,它会更改MB.value并触发ajax valueChange事件,但组件B不会显示。
如果我刷新页面或单击Url栏上的enter,则会显示组件B
我无法在此发布我的实际代码,但我将尝试显示实际行为:
Page.xhtml
<h:form>
<mycomp:A id="comp-a" changeListener="#{MB.listener}" renderComps="comp-b" />
<mycomp:B id="comp-b" rendered="#{MB.value gt 0}" />
</h:form>
compA.xhtml
<cc:interface>
<cc:attribute name="renderComps" />
<cc:attribute name="listener" method-signature="void m(javax.faces.event.ValueChangeEvent)" />
</cc:interface>
<cc:implementation>
<h:outputLabel value="Comp A: " />
<myComp:select listener="#{cc.attrs.listener}"
render="#{cc.attrs.renderComps}"
/>
</cc:implementation>
compB.xhtml
<cc:interface>
</cc:interface>
<cc:implementation>
<span id="cc.clientId">
<h:outputLabel value="Comp B" />
</span>
</cc:implementation>
我感谢你的帮助 您应该确保为每个ajax请求更新mycop:B的父组件。由于您的组件最初没有呈现,您将无法引用它进行更新,因此需要更新其父级,这将重新计算所有
rendered=
表达式
在mycomp中:选择(您没有提供代码),尝试更新@form
,或传递表单id以代替您的compB id
要确定选择后更新的组件,可以使用浏览器调试工具观察收到的XHR响应。这对我来说非常有意义。成功了!关于XHR技巧,我不需要它来解决这个问题,但是它对于调试非常有用,我稍后会检查它。非常感谢你!