小编典典

AJAX渲染属性不适用于rendered =“ false”组件

ajax

我有一个要在用户点击时显示/隐藏的组件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我的按钮的属性值。它明确列出了explanationshowButton

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

malformedXML:更新期间:找不到说明

我怎么解决这个问题?

我不想回到隐藏源代码中的元素的位置,所以我不想使用任何jQuery toggle(-)或使用任何一种隐藏元素的方式style="display: none"

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


阅读 336

收藏
2020-07-26

共1个答案

小编典典

您无法更新未渲染的元素,render =“ false是“ JSF的一种方法”,以从DOM树中删除元素,

它不像css display:none或visible:hidden <-这两者将使元素保留在DOM树中但被隐藏,而JSF render =
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>
2020-07-26