1
加入我使用primefaces 6.0,鑽嘴魚科-2.2.12和wildfly-8.2。我的目標是使用prerenderview偵聽器動態添加columnresize監聽器到數據表。當以前沒有附加ajax監聽器時,此解決方案工作正常。但是,如果數據表具有其他ajax監聽器(比如rowselect),並且使用prerenderview監聽器添加了resize監聽器,那麼當我嘗試更新呈現的數據表時,我會在JSF實現中收到空指針異常。無法新的Ajax行爲添加到primefaces動態數據表時,已經有聽衆在XHTML
XHTML代碼:
<f:event type="preRenderView" listener="#{datatableTestBean.onPreRenderViewEvent()}"/>
<p:panelGrid>
<p:row>
<p:column>
<p:commandButton value="refersh datatable" actionListener="#{datatableTestBean.refershAll()}" update="-frm3"/>
</p:column>
</p:row>
<p:row>
<p:column>
<p:dataTable id="scrolltestdt" value="#{datatableTestBean.dtValues}" var="row"
resizableColumns="true" liveResize="false" resizeMode="expand"
scrollable="true" scrollHeight="400" selectionMode="single" rowKey="#{row}">
<p:ajax event="rowSelect" listener="#{datatableTestBean.onRowSelected()}"/>
<p:column filterBy="#{row[0]}" headerText="COlumn1" >
<h:outputText value="#{row[0]}"/>
</p:column>
<p:column filterBy="#{row[1]}" headerText="COlumn2">
<h:outputText value="#{row[1]}" />
</p:column>
</p:dataTable>
</p:column>
</p:row>
CDI bean代碼:
int tmp = 0;
public void onPreRenderViewEvent() {
if (tmp == 0) {
System.out.println("onPreRenderViewEvent");
DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("frm3-scrolltestdt");
addColumnResizeListenerToDatatable(table);
tmp = 1;
}
}
private void addColumnResizeListenerToDatatable(DataTable table) {
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
MethodExpression me = ef.createMethodExpression(fc.getELContext(), "#{datatableTestBean.onResize}", Object.class, new Class[]{ColumnResizeEvent.class});
AjaxBehavior columnResizeEvent = (AjaxBehavior) fc.getApplication().createBehavior(AjaxBehavior.BEHAVIOR_ID);
columnResizeEvent.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(me, me));
table.addClientBehavior("colResize", columnResizeEvent);
}
當我使用命令按鈕更新窗體此錯誤即將到來。
日誌:
[javax.enterprise.resource.webcontainer.jsf.context] (default task-54) java.lang.NullPointerException
at javax.faces.component.UIComponentBase.restoreBehaviors(UIComponentBase.java:2228)
at javax.faces.component.UIComponentBase.restoreBehaviorsState(UIComponentBase.java:2203)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1623)
at javax.faces.component.UIData.restoreState(UIData.java:1750)
at org.primefaces.component.api.UIData.restoreState(UIData.java:1311)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$2.visit(FaceletPartialStateManagementStrategy.java:379)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
at org.primefaces.component.api.UIData.visitTree(UIData.java:827)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.restoreView(FaceletPartialStateManagementStrategy.java:366)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:138)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:591)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:151)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at org.omnifaces.viewhandler.OmniViewHandler.restoreView(OmniViewHandler.java:100)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:199)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)
at io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:129)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)