你能从p:ajax监听器更新h:outputLabel吗?
我正在尝试使用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}"> 解决方法
您无法更新未呈现的元素,render = false“是JSF方式”以从DOM树中删除元素,
它不像css display:none或visibility:hidden< - 这两个将保留DOM树中的元素但隐藏,而JSF呈现= false甚至不会渲染(保留)DOM树中的元素(你甚至看不到它在页面的“查看源”中) 所以在你的情况下你需要用`panelGroup’包装outputLabel并更新包装器的id <h:panelGroup id="periodLabelWrapper"> <h:outputLabel for="period" value="Period" id="periodLabel" rendered="#{ppBacker.periodRendered}"> </h:panelGroup> 并在< p:ajax update属性中引用包装器(总是在DOM树中)id,如下所示: <p:ajax process=":addProgram:addProgramTo" update=":addProgram:periodGrid,:addProgram:periodLabelWrapper" event="change" listener="#{ppBacker.addProgramListener}" /> 另一种解决方案是更新整个表单,如下所示< p:ajax update =“@ form”...这样你不需要包装outputLabel 关于你的评论问题
您无法在更新中定位页面中不存在的元素(rendered = false)“它不在那里” 但是当你使用update =“@ form”或update =“someWrapperID”时,表单/包装器“重新计算”它的所有内部元素,包括render =“#{someBean.someCondition}”并且条件得到“重新评估” “所以,如果结果是真的,那么将展示elemet …… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |