AJAX 渲染属性不适用于 render="false" 组件 [重复]
Posted
技术标签:
【中文标题】AJAX 渲染属性不适用于 render="false" 组件 [重复]【英文标题】:AJAX render attribute doesn't work with rendered="false" component [duplicate] 【发布时间】:2012-11-26 11:49:26 【问题描述】:我有一个组件要在用户点击commandButton
后显示/隐藏。
是这样的:
<h:commandButton id="showButton" value="#bean.wasPressed ? 'Hide' : 'Show'">
<f:ajax listener="#bean.toggle()" render="explanation showButton" />
</h:commandButton>
和
<h:panelGroup id="explanation" rendered="#bean.wasPressed">
<h:outputText value="something" />
</h:panelGroup>
bean.toggle()
只是将wasPressed
属性适当地设置为 true 或 false。我正在使用<h:form prependId="false">
。
问题是我的按钮的render
属性的值。它明确列出了explanation
和showButton
。
只要showButton
始终存在(它只会更改其标签),explanation
仅在wasPressed
属性为真时才存在。否则它会说:
malformedXML:更新期间:未找到说明
我该如何解决这个问题?
我不想恢复隐藏源代码中的元素,所以我不想使用任何 jQuery toggle(-) 或任何使用 style="display: none"
或任何此类东西隐藏元素的方式。
在 JSF 2.1 中甚至可以实现吗?
【问题讨论】:
使用 id 向该 panelGroup 添加一个包装器并引用它....您不能引用未呈现的 jsf elememt ***.com/a/10707789/617373 像魅力一样工作,谢谢!能否请您添加此问题的答案,以便我能够接受? 【参考方案1】:您无法更新未渲染的元素,rendered=false“是一种 JSF 方式”以从 DOM 树中删除元素,
它不像 css display:none 或 visibility:hidden
所以在你的情况下,你需要用另一个 `panelGroup' 包装 panelGroup 并更新包装器的 id
<h:commandButton id="showButton" value="#bean.wasPressed ? 'Hide' : 'Show'">
<f:ajax listener="#bean.toggle()" render="explanationWrapper showButton" />
</h:commandButton>
<h:panelGroup id="explanationWrapper">
<h:panelGroup id="explanation" rendered="#bean.wasPressed">
<h:outputText value="something" />
</h:panelGroup>
</h:panelGroup>
也看看类似的问题
Can you update an h:outputLabel from a p:ajax listener?
【讨论】:
以上是关于AJAX 渲染属性不适用于 render="false" 组件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
计算不适用于 Handsontable 中使用 AJAX 的自定义单元格渲染
angular 2 [innerHTML] 在 html 内渲染(不适用于 angular 2)[重复]