gpt4 book ai didi

jsf - JSF 中的条件渲染

转载 作者:行者123 更新时间:2023-12-04 01:49:50 30 4
gpt4 key购买 nike

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





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

(1 个回答)


5年前关闭。




您好,我有这段代码可以在我的页面中有条件地呈现组件:

<h:commandButton action="#{Bean.method()}"  value="Submit">
<f:ajax execute="something" render="one two" />
</h:commandButton>

<p><h:outputFormat rendered="#{Bean.answer=='one'}" id="one" value="#{messages.one}"/></p>
<p><h:outputFormat rendered="#{Bean.answer=='two'}" id="two" value="#{messages.two}"/></p>

它得到答案并呈现组件,但为了在我的页面上看到它,我需要刷新页面。我该如何解决这个问题?有什么建议吗?

最佳答案

JSF 组件的 rendered属性是服务器端设置,用于控制 JSF 是否应生成所需的 HTML。
<f:ajax>标签render属性应指向 JavaScript 可以通过 document.getElementById() 获取的 JSF 生成的 HTML 元素的(相对)客户端 ID。来自 HTML DOM 树,以便在 ajax 请求完成时替换其内容。

但是,由于您指定了一个从未被 JSF 呈现的 HTML 元素的客户端 ID(由于 renderedfalse),JavaScript 无法在 HTML DOM 树中找到它。

您需要将它包装在一个容器组件中,该组件始终呈现并因此始终在 HTML DOM 树中可用。

<h:commandButton action="#{Bean.method()}"  value="Submit">
<f:ajax execute="something" render="messages" />
</h:commandButton>

<p>
<h:panelGroup id="messages">
<h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/>
<h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/>
</h:panelGroup>
</p>

无关 对于具体问题,您可能存在设计错误。为什么你不只是创建一个 #{Bean.message}您在操作方法中使用所需消息设置的属性,以便您可以使用:
<h:commandButton action="#{Bean.method()}"  value="Submit">
<f:ajax execute="something" render="message" />
</h:commandButton>

<p>
<h:outputFormat id="message" value="#{Bean.message}" />
</p>

关于jsf - JSF 中的条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385278/

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