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。我正在使用&lt;h:form prependId="false"&gt;

问题是我的按钮的render 属性的值。它明确列出了explanationshowButton

只要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)[重复]

HTML5 必需属性不适用于 AJAX 提交

jsTree:progressive_render 与 ajax / 从数组渲染节点

Ajax 仅在元素存在时渲染