gpt4 book ai didi

ajax - 你能更新一个 h :outputLabel from a p:ajax listener?

转载 作者:行者123 更新时间:2023-12-04 17:11:36 26 4
gpt4 key购买 nike

我正在尝试使用 p:ajax 标记,然后在该监听器中,我设置了一个名为“periodRendered”的值。然后我试图通过来自 p:ajax 标签的更新来更新 h:outputLabel 标签。它没有更新ajaxily,我认为这是因为primefaces ajax 标签无法更新标准jsf outputLabel 标签。

我的假设是否正确,是否应该使用更合适的标签而不是 h:outputLabel ?

<h:outputLabel for="addProgramTo" value="Add Program To" />
<p:selectOneMenu value="#{ppBacker.grantProgram.grant_project_id}" id="addProgramTo" size="1" styleClass="listBoxMedium">
<p:ajax process=":addProgram:addProgramTo" update=":addProgram:periodGrid, :addProgram:periodLabel" event="change" listener="#{ppBacker.addProgramListener}" />
<f:selectItems value="#{ppBacker.grantProjectDropDownList}" />
</p:selectOneMenu>

<h:outputLabel for="period" value="Period" id="periodLabel" rendered="#{ppBacker.periodRendered}">

最佳答案

您无法更新未呈现的元素,rendered=false “是一种 JSF 方式”从 DOM 树中删除元素,

它不像 css display:nonevisibility:hidden <- 这两个将保持 DOM 树中的元素但隐藏,而 JSF rendered=false甚至不会渲染(保留)DOM 树中的元素(您甚至不会在页面的“查看源代码”中看到它)

所以在你的情况下,你需要包装 outputLabel使用“panelGroup”并更新包装器的 id

<h:panelGroup id="periodLabelWrapper">
<h:outputLabel for="period" value="Period" id="periodLabel" rendered="#{ppBacker.periodRendered}">
</h:panelGroup>

并引用 <p:ajax 中的包装器(始终位于 DOM 树中)ID update属性,像这样:
<p:ajax process=":addProgram:addProgramTo" update=":addProgram:periodGrid, :addProgram:periodLabelWrapper" event="change" listener="#{ppBacker.addProgramListener}" />

另一种解决方案是像这样更新整个表单 <p:ajax update="@form" ...这样你就不需要包装 outputLabel
关于您的评论问题

how does @form update the un-rendered elements, but targeting them directly through id's does not?



您不能定位 update 中的元素页面中不存在(rendered=false)“它不存在”

但是当你使用 update="@form"update="someWrapperID"表单/包装器“重新评估”其所有内部元素,包括带有 rendered="#{someBean.someCondition}" 的元素。并且条件得到“重新评估”,因此如果结果为 true elemet 将显示...

关于ajax - 你能更新一个 h :outputLabel from a p:ajax listener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358051/

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