我有一个要在用户点击时显示/隐藏的组件commandButton。
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">。
bean.toggle()
wasPressed
<h:form prependId="false">
问题是render我的按钮的属性值。它明确列出了explanation和showButton。
render
explanation
showButton
只要showButton始终存在(仅更改其标签),explanation则仅在wasPressed属性为true 时才存在。否则它说:
malformedXML:更新期间:找不到说明
我怎么解决这个问题?
我不想回到隐藏源代码中的元素的位置,所以我不想使用任何jQuery toggle(-)或使用任何一种隐藏元素的方式style="display: none"。
style="display: none"
在JSF 2.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>