JSF 2.2参数错误:参数key为空



当我点击Primefaces 5对话框(对话框框架)的commendlink/button时,我得到Parameter key is null错误。

mainpage.xthml

    <p:commandLink immediate="true" actionListener="#{ManageProgrammerActionBean.selectDepartment()}">
        <p:ajax event="dialogReturn" listener="#{ManageProgrammerActionBean.returnDepartment}" update="departmentPanel" />
        <p:graphicImage url="/images/search.png" style="height:30px;width:30px" />
    </p:commandLink>

dialogpage.xhtml

    <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui" template="/common/dialogTemplate.xhtml">
    <ui:define name="content">
        <h:form>
            <p:dataTable var="department" value="#{DepartmentDialogActionBean.departmentList}" id="departmentTable" paginator="true" rows="10" style="width:100%;" widgetVar="departmentTable"
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10, 15"
                rowIndexVar="index">
                <p:column headerText="No" style="width:50px;">
                    <h:outputText value="#{index + 1}" />
                </p:column>
                <p:column headerText="Name">
                    <h:outputText value="#{department.name}" />
                </p:column>
                <p:column headerText="Description">
                    <h:outputText value="#{department.description}" />
                </p:column>
                <p:column headerText="Add Your Custom Column">
                    <h:outputText value="" />
                </p:column>
                <p:column style="width:30px;text-align: center;">
                    <p:commandLink action="#{DepartmentDialogActionBean.selectDepartment(department)}" immediate="true">
                        <h:graphicImage url="/images/select.png" styleClass="action-img" />
                    </p:commandLink>
                </p:column>
            </p:dataTable>
        </h:form>
    </ui:define>
</ui:composition>
异常堆栈

18:22:59,516 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-25) java.lang.NullPointerException: Argument Error: Parameter key is null: javax.fa
ces.FacesException: java.lang.NullPointerException: Argument Error: Parameter key is null
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:276) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) [primefaces-5.0.jar:5.0]
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:927) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at org.omnifaces.filter.FacesExceptionFilter.doFilter(FacesExceptionFilter.java:56) [omnifaces-1.7.jar:1.7]
    at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) [omnifaces-1.7.jar:1.7]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70) [primefaces-5.0.jar:5.0]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.15.Final.jar:1.0.15
.Final]
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.0.15.Final.jar:1.0.15.
Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.15.Fin
al.jar:1.0.15.Final]
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.0.15.Final.jar:1.0.1
5.Final]
    at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_02]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_02]
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_02]
Caused by: java.lang.NullPointerException: Argument Error: Parameter key is null
    at com.sun.faces.util.Util.notNull(Util.java:448) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at com.sun.faces.context.SessionMap.get(SessionMap.java:116) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at org.primefaces.component.commandlink.CommandLink.queueEvent(CommandLink.java:219) [primefaces-5.0.jar:5.0]
    at org.primefaces.behavior.ajax.AjaxBehaviorRenderer.decode(AjaxBehaviorRenderer.java:47) [primefaces-5.0.jar:5.0]
    at javax.faces.component.behavior.ClientBehaviorBase.decode(ClientBehaviorBase.java:132) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at org.primefaces.renderkit.CoreRenderer.decodeBehaviors(CoreRenderer.java:492) [primefaces-5.0.jar:5.0]
    at org.primefaces.component.commandlink.CommandLinkRenderer.decode(CommandLinkRenderer.java:50) [primefaces-5.0.jar:5.0]
    at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1225) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:590) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1690) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIForm.visitTree(UIForm.java:371) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1701) [jboss-jsf-api_2.2_spec-2.2.6.jar:2.2.6]
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:406) [jsf-impl-2.2.6-jbossorg-4.jar:]
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:269) [jsf-impl-2.2.6-jbossorg-4.jar:]
    ... 42 more

首先要防止id和widgetVar使用相同的名称。

然后尝试在dataTable中使用绑定。

<p:dataTable ....  binding="#{DepartmentDialogActionBean.dataTable}" .... />

Java文件:

class DepartmentDialogActionBean {
    private DataTable dataTable;
    public DataTable getDataTable() {
         return dataTable
    }
    public void setDataTable(DataTable t) {
         dataTable = t;
    }
    public void selectDepartment() {
        Department dep = (Department) dataTable.getRowData();
        //do anthing with dep
    }

}

应该是访问dataTable中数据的最简单的方法!

我在使用树表(primefaces 5.3)中的命令按钮时遇到了类似的问题。我使用widgetVar作为命令按钮。渲染引擎生成它的多个,从而导致此错误消息。移除widgetvar属性后,问题解决了。您可以使用id属性,而不是使用小部件var,并在托管bean中使用它,如下所示:

FacesContext.getCurrentInstance().getViewRoot().findComponent('componentID');

最新更新