当前位置: 首页 > 面试题库 >

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

邓鸿信
2023-03-14
问题内容

我有一个要在用户点击时显示/隐藏的组件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中甚至可以实现吗?


问题答案:

您无法更新未渲染的元素,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>


 类似资料:
  • 我有一个组件,我想在用户点击后显示/隐藏。 它是这样的: 和 只需将wasPressed属性适当地设置为true或false。我正在使用<代码> 问题是“我的按钮”的“渲染”属性的值。它明确地包括两个方面:解释和显示按钮。 只要始终存在(它只更改它的标签),仅在属性为真时才存在。否则它说: malformedXML:更新期间:找不到解释 我如何解决这个问题? 我不想恢复到在源代码中隐藏元素,所以我

  • 我试图用ajax更新一个有条件渲染的组件。 但是,这不起作用。我可以保证实际上是可用的。这是如何造成的,我如何解决它?

  • 调用didRender钩子以在呈现模板时对DOM进行更新。 语法 (Syntax) import Ember from 'ember'; export default Ember.Component.extend({ ... didRender() { //code here }, ... }) 例子 (Example) 下面给出的示例描述了使用did

  • 因此,我正在构建这个游戏和一个地图编辑器/sdk类型的协议。在我运行w7的台式电脑和我的朋友运行w10的笔记本电脑上,一切都工作得非常好。我可以添加对象并四处移动它们(每个对象都有一个自动更新属性窗口),一切都很好。 我目前正在旅行,所以我决定将项目复制到我的macbook上。UI上的一切都仍然有效,除了停止渲染的东西。我知道对象存在于应用程序中,因为我可以单击它们所在的位置,属性更新就像在我的桌

  • 问题内容: 我尝试运行RichFaces4应用,但组件未渲染。例如,当我尝试这个演示:演示时,我得到如下信息: 我的代码与演示中的代码几乎相同。我刚刚添加了表单标签,因为它对此有所抱怨。 问题答案: 这就是Crome开发人员工具告诉我的内容 http://img571.imageshack.us/i/rfnotdefined.jpg (未捕获的ReferenceError:未定义RichFaces

  • 问题内容: 我建立了一个复合组件,看起来像这样: 组件正确显示当前标签。 现在,当执行该动作时,什么也不会发生。但是,当我将Postfix添加到组件中的ID时,它可以正常工作(请参见下文)。 并使用后缀在render中定义ID: 有人可以向我解释为什么仅当我在ID中添加后缀时才起作用吗? 问题答案: 这个问题实际上有两个方面。 第一个问题是,实际上指定复合部件的ID 本身 的。默认情况下,HTML