AJAX渲染属性不渲染=“假”成分[复制]工作(AJAX render attribute does

2019-08-03 17:21发布

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

  • 阿贾克斯更新/渲染已经渲染属性的组件不工作 1回答

我有我想要显示/隐藏用户点击一个组件后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:在更新:explanaition未找到

我怎么解决这个问题?

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

它甚至在JSF 2.1实现的?

Answer 1:

不能更新未渲染,渲染的元素=假“是一个JSF办法”中删除从DOM树中的元素,

它不喜欢的CSS display:none或visibility:hidden的< - 这两人将保留的元素在DOM树,但隐藏的,而JSF渲染=虚假甚至不会渲染(保持)在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>

还看类似的问题

你可以更新H:outputLabel从AP:阿贾克斯监听?



文章来源: AJAX render attribute doesn't work with rendered=“false” component [duplicate]