ajax - 从 Backing Bean 更新嵌套面板
问题描述
我有一个带有部分的面板。每个部分由一个 div 分隔并在其中包含元素。我正在尝试基于轮询器更新支持 bean 的某些部分。轮询器调用一个 bean。
如果有任何事情要做,bean 应该更新第一部分中的表。In addition, when a row in the table is selected, the bean should update other sections of the panel.
我所见过的解决方案都没有显示如何更新嵌套元素。
问题是虽然我可以更新整个面板
PrimeFaces instance = PrimeFaces.current();
instance.ajax().update("threatForm:threatListPanel");
如果我尝试更新面板中的任何内容,
PrimeFaces instance = PrimeFaces.current();
instance.ajax().update("threatForm:threatListPanel:threatListPanelDiv");
它会抛出:java.lang.IllegalArgumentException:threatListPanel:
这是xhtml
<h:form id="threatForm">
<!-- Update the threat list at regular intervals -->
<p:poll interval="#{threatMonitorView.pollInterval}" listener="#{threatMonitorView.updateThreatList()}" />
<p:panel id="threatListPanel" header="Threat Monitor Page">
<div id="threatListPanelDiv" class="threatPanel">
<!-- column with threats listed -->
<div class="threatTableColumn1">
<p:column>
<p:dataTable id="threatListTable" var="singleThreat"
widgetVar="threatTable" value="#{threatMonitorView.threats}"
selectionMode="single"
selection="#{threatMonitorView.selectedThreat}"
rowKey="#{singleThreat.uniqueId}" scrollable="false"
sortBy="#{singleThreat.timeReceived}">
<!-- update the information area when a threat is selected -->
<p:ajax event="rowSelect"
listener="#{threatMonitorView.onRowSelectThreat}" />
<p:column headerText="Active Threats">
<!-- header stuff -->
</p:column>
</p:dataTable>
</p:column>
<!-- end of column 1 -->
</div>
<!-- End of threatTableColumn1 divider -->
<!-- Threat info -->
<div class="threatTableColumn2">
<p:column id="threatTableColumn2Id">
Stuff in this colunm
</p:column>
<!-- column 2 end -->
</div>
<!-- End of threatTableColumn2 divider -->
<div id="threatTableColumn3Div" class="threatTableColumn3">
<p:column>
Stuff in this column
</p:column>
</div>
<!-- End of threatTableColumn3 -->
<div class="threatTableFooter">
<p:commandButton value="Close" id="threatCloseButton"
action="#{threatMonitorView.closeThreatButton()}"
</p:commandButton>
</div>
<!-- End of threatTableFooter divider -->
</div>
<!-- end of threatPanel -->
</p:panel>
</h:form>
这是更新 bean
public void updateThreatList() {
if (tlm.isThreatListChanged()){
PrimeFaces instance = PrimeFaces.current();
instance.ajax().update("threatForm:threatListPanel:threatListPanelDiv");
tlm.setThreatListChanged(false);
}
}
是因为我正在更新一个div吗?我尝试了其他元素
PrimeFaces instance = PrimeFaces.current();
instance.ajax().update("threatForm:threatListPanel:threatListTable");
,但似乎没有什么不同。
任何帮助/见解将不胜感激。蒂亚!
我将 DIV 更改为:
<div jsf:id="threatListPanelDiv" class="threatPanel">
找不到组件
这是错误:13:07:45,431 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle](默认任务1)/WEB-INF/lib/incentcontrol-module-firstview-1.2.0-SNAPSHOT.jar /META-INF/resources/secured-pages/firstview/threatmonitor/threatMonitorView.xhtml @23,57 listener="#{threatMonitorView.updateThreatList()}":java.lang.IllegalArgumentException:threatListPanel:javax.el.ELException:/ WEB-INF/lib/incentcontrol-module-firstview-1.2.0-SNAPSHOT.jar/META-INF/resources/secured-pages/firstview/threatmonitor/threatMonitorView.xhtml @23,57 listener="#{threatMonitorView.updateThreatList( )}":java.lang.IllegalArgumentException:com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)的threatListPanel [jsf-impl-2.2.12-jbossorg-2.jar:2.2.12 -jbossorg-2] 在 org.primefaces.component.poll.Poll。广播(Poll.java:251)[primefaces-6.2.3.jar:6.2.3] 在 javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)[jboss-jsf-api_2.2_spec-2.2.12 .jar:2.2.12] 在 javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) [jboss-jsf-api_2.2_spec-2.2.12.jar:2.2.12] 在 com.sun.faces。 com.sun.faces.lifecycle.Phase.doPhase(Phase. java:101) [jsf-impl-2.2.12-jbossorg-2.jar:2.2.12-jbossorg-2] 在 com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) [jsf-impl -2.2.12-jbossorg-2.jar:2.2.12-jbossorg-2] 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) [jboss-jsf-api_2.2_spec-2.2.12.jar :2.2.12] 在 io.undertow.servlet.handlers.ServletHandler。handleRequest(ServletHandler.java:86) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow -servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:151) [undertow-websockets-jsr-1.2.9.Final.jar :1.2.9.Final] 在 io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow。 servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 de.heimannansystems.jee.incentcontrol.servletfilter.LoginFilter.callNextFilter( LoginFilter.java:97) [incentcontrol-common-3.2.0.jar:] 在 de.heimnnsystems.jee.incentcontrol.servletfilter.LoginFilter。doFilter(LoginFilter.java:55) [incentcontrol-common-3.2.0.jar:] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.2.9.Final. jar:1.2.9.Final] 在 io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io .undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest (ServletSecurityRoleHandler.java:62) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet- 1.2.9.Final.jar:1.2.9.Final] 在 org.wildfly.extension.undertow.security。SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 io .undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler .handleRequest(ServletAuthenticationCallHandler.java:57) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow- core-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) [undertow-core-1.2.9.Final .jar:1.2.9.Final] 在 io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.security.handlers.AuthenticationMechanismsHandler。 handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler。handleRequest(CachedAuthenticatedSessionHandler.java:72) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) [undertow-core -1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.2.9.Final.jar:1.2.9 .Final] 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 org.wildfly.extension.undertow。 security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 在 io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.2.9.Final.jar:1.2.9。最终] 在 io.undertow.server.handlers.PredicateHandler。handleRequest(PredicateHandler.java:43) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282) [undertow-servlet -1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261) [undertow-servlet-1.2.9.Final.jar:1.2.9 .Final] 在 io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.servlet.handlers .ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172) [undertow-servlet-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.server.Connectors.executeRootHandler(Connectors.java:199) [undertow -core-1.2.9.Final.jar:1.2.9.Final] 在 io.undertow.server。HttpServerExchange$1.run(HttpServerExchange.java:774) [undertow-core-1.2.9.Final.jar:1.2.9.Final] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt. jar:1.8.0_121] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_121] 在 java.lang.Thread.run(Thread.java:745) [ rt.jar:1.8.0_121] 引起:java.lang.IllegalArgumentException:threatListPanel at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:651) [jboss-jsf-api_2.2_spec-2.2.12.jar: 2.2.12] 在 org.primefaces.util.ComponentTraversalUtils.firstById(ComponentTraversalUtils.java:140) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces.expression.SearchExpressionFacade.resolveComponentById(SearchExpressionFacade.java:526 ) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces。expression.SearchExpressionFacade.resolveClientId(SearchExpressionFacade.java:338) [primefaces-6.2.3.jar:6.2.3] at org.primefaces.expression.SearchExpressionFacade.resolveClientId(SearchExpressionFacade.java:292) [primefaces-6.2.3.jar :6.2.3] 在 org.primefaces.PrimeFaces$Ajax.validateClientId(PrimeFaces.java:290) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces.PrimeFaces$Ajax.update(PrimeFaces.java: 280) [primefaces-6.2.3.jar:6.2.3] 在 de.heimannsystems.jee.incentcontrol.modules.firstview.threatmonitor.ThreatMonitorView.updateThreatList(ThreatMonitorView.java:145) [incentcontrol-module-firstview-1.2.0 -SNAPSHOT.jar:1.2.0-SNAPSHOT] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_121] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt. jar:1.8.0_121] 在 sun.reflect。DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_121] 在 java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_121] 在 javax.el。 ELUtil.invokeMethod(ELUtil.java:308) [jboss-el-api_3.0_spec-1.0.4.Final.jar:1.0.4.Final] 在 javax.el.BeanELResolver.invoke(BeanELResolver.java:537) [jboss -el-api_3.0_spec-1.0.4.Final.jar:1.0.4.Final] 在 javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) [jboss-el-api_3.0_spec-1.0.4.Final .jar:1.0.4.Final] 在 com.sun.el.parser.AstValue.invoke(AstValue.java:286) [javax.el-impl-3.0.1-b05-jbossorg-1.jar:3.0.1 -b05-jbossorg-1] 在 com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) [javax.el-impl-3.0.1-b05-jbossorg-1.jar:3.0.1-b05-jbossorg -1] 在 org.jboss.weld.util.el.ForwardingMethodExpression。调用(ForwardingMethodExpression.java:40)[weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50 ) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) [weld-core -impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-impl-2.2.16。 SP1.jar:2015-09-16 08:49] 在 com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.2.12-jbossorg-2.jar:2.2 .12-jbossorg-2] ... 45 更多49] 在 org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 org. jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 com.sun.faces.facelets.el .TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.2.12-jbossorg-2.jar:2.2.12-jbossorg-2] ... 45 更多49] 在 org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 org. jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-impl-2.2.16.SP1.jar:2015-09-16 08:49] 在 com.sun.faces.facelets.el .TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.2.12-jbossorg-2.jar:2.2.12-jbossorg-2] ... 45 更多12-jbossorg-2] ... 45 更多12-jbossorg-2] ... 45 更多
13:07:45,443 严重 [org.omnifaces.exceptionhandler.FullAjaxExceptionHandler](默认任务 1) FullAjaxExceptionHandler:处理 JSF ajax 请求期间发生异常。将显示错误页面“/error.xhtml”。:java.lang.IllegalArgumentException:threatListPanel at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:651) [jboss-jsf-api_2.2_spec-2.2.12. jar:2.2.12] 在 org.primefaces.util.ComponentTraversalUtils.firstById(ComponentTraversalUtils.java:140) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces.expression.SearchExpressionFacade.resolveComponentById(SearchExpressionFacade.java :526) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces.expression.SearchExpressionFacade.resolveClientId(SearchExpressionFacade.java:338) [primefaces-6.2.3.jar:6.2.3] 在 org.primefaces 。表达。
解决方案
解决它。
这是两个问题的结合。首先是否可以使用 JSF ajax 更新非 JSF 组件(纯 HTML)?
我将 jsf:id 添加到 Div
第二个来自如何找出 ajax 更新/渲染组件的客户端 ID?找不到从“bar”引用的表达式“foo”的组件
它说要在 HTML 输出中查找实际的客户端 ID
一旦我有了 jsf:id 和实际的客户端 ID,它就可以工作了
推荐阅读
- google-apps-script - 如何使用 Apps 脚本填充符合条件的单元格?
- python - 为什么 sess.run(tf.assign) 在每个 epoch 之后需要更长的时间来执行?
- reactjs - 在 Redux 中间件中进行调度无法触发连接 mapStateToProps 中的状态更改
- c# - 仅使用属性值将对象序列化为字符串
- c# - 使用控制台应用程序测试 WCF Web 服务返回错误(application/xop+xml” 与预期类型“text/html; charset=UTF-8”不匹配)
- java - 我正在将数据从 firebase 检索到列表视图中,但我希望数据在不使用 webview 的情况下以合理的格式显示,有什么建议吗?
- python-3.x - 如何在没有 numpy、zip 等的情况下将列表中的元素相乘并以简单的方式求和
- java - 如何打印双数组列表的双数组列表
- c# - 如何将(rdlc)表头与数据一起分成两行?
- java - 使用级联保存父实体时如何获取子实体ID