gpt4 book ai didi

AJAX 渲染属性不适用于渲染的 ="false"组件

转载 作者:行者123 更新时间:2023-12-04 17:37:32 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Ajax update/render does not work on a component which has rendered attribute

(1 个回答)


5年前关闭。




我有一个组件要在用户点击 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属性适本地为真或假。我正在使用 <h:form prependId="false"> .

问题是 render 的值我的按钮的属性。它明确征用了两者: explanationshowButton .

只要 showButton始终存在(它只更改其标签), explanation仅当 wasPressed 时才存在属性是真的。否则它说:

malformedXML: During update: explanaition not found



我怎么解决这个问题?

我不想恢复在源代码中隐藏元素,所以我不想使用任何 jQuery toggle(-) 或任何使用 style="display: none" 隐藏元素的方式或任何这些东西。

它甚至可以在 JSF 2.1 中实现吗?

最佳答案

您不能更新未呈现的元素,render=false “是一种 JSF 方式”以从 DOM 树中删除元素,

它不像 css display:none 或 visible:hidden <- 这两个将元素保留在 DOM 树中但隐藏,而 JSF 渲染 = false 甚至不会渲染(保留)DOM 树中的元素(你甚至不会看到它在页面的“查看源代码”中)

因此,在您的情况下,您需要用另一个“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 渲染属性不适用于渲染的 ="false"组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com