2013-10-15 28 views
0

我有一个关于Primefaces orderList的问题。p:commandButton内Orderlist不工作​​

我有一个orderList看起来像这样:

<p:orderList id="technikersTable" 
         value="#{systemlandschaftRessourceHandler.entity.technikers}" 
         var="_techniker" 
         itemValue="#{_techniker}" 
         converter="#{entityConverter}" 
         controlsLocation="none"> 

       <f:facet name="caption">Techniker</f:facet> 

       <p:column> 
        <p:commandButton styleClass="colButton" 
            icon="ui-icon-trash" 
            action="#{systemlandschaftRessourceHandler.removeTechniker(_techniker)}" 
            update=":systemLandschaftTabView:sysObjektDetailPanelForm:technikersTable"/> 
       </p:column> 
       <p:column style="width:75%;"> 
        <p:outputLabel value="#{_techniker.verantwortlich.displayName}" /> 
       </p:column> 

      </p:orderList> 

我的问题是,命令按钮在第一列抛出一个空指针异常。 请求永远不会到达我的bean。

命令按钮可能不在orderList中吗? 我已经用dataTables做了很多相同的事情。

堆栈跟踪:

ERROR 2013-10-15 14:37:55,009 [MmnetExceptionHandler] Fehler auf der Seite: /views/protected/systemlandschaft/systemlandschaftHome.xhtml, isAjaxRequest=true 
ERROR 2013-10-15 14:37:55,010 [MmnetExceptionHandler] [SCUE070] Allgemeiner Anwendungsfehler! : java.lang.NullPointerException 
    at java.lang.Class.isAssignableFrom(Native Method) 
    at org.apache.el.util.ReflectionUtil.isAssignableFrom(ReflectionUtil.java:319) 
    at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:185) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:257) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at org.apache.myfaces.extensions.cdi.jsf.impl.security.SecurityViolationAwareActionListener.processAction(SecurityViolationAwareActionListener.java:56) 
    at org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:68) 
    at org.apache.myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processAction(CodiActionListener.java:58) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIData.broadcast(UIData.java:1093) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at de.company.mmnet.sessioninfo.HttpSessionUserFilter.doFilter(HttpSessionUserFilter.java:42) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:101) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) 
    at java.lang.Thread.run(Thread.java:722) 

DEBUG 2013-10-15 14:37:55,094 [EntityManagerProducer] EntityManager geschlossen. 
+0

你能发布stacktrace吗? – dratewka

回答

1

您可以使用一个命令按钮的orderList内。你的问题是你正在使用#{_Techniker} var作为参数。当您单击按钮时,action属性正在评估服务器端的EL表达式,并且这导致了空指针。

它确实在dataTable中工作,但datatable组件的设计方式不同。

我会考虑使用不同的组件,但是如果您确实需要使用订单列表,则可以使用p:remoteCommand将techniker的ID发送到支持bean。

Primefaces RemoteCommand

+1

谢谢。这里是一个具体解决方案的Primefaces社区链接。 http://forum.primefaces.org/viewtopic.php?f=3&t=34424 – LStrike

0

扩大LStrike评论,这里是https://forum.primefaces.org/viewtopic.php?f=3&t=34424

豆的相关内容:

@ManagedBean 
@RequestScoped 
public class TechnikersBean { 
    public List<String> getPersons() { 
     List<String> result = new ArrayList<String>(); 

     result.add("Person1"); 
     result.add("person2"); 
     return result; 
    } 

    public void setPersons(List<String> persons) { 

    } 

    public void removeTechniker(ActionEvent event) { 
     Map<String, String> parameterMap = FacesContext.getCurrentInstance().getExternalContext() 
       .getRequestParameterMap(); 
     String name = parameterMap.get("name"); 
     System.out.println(name); 
    } 
} 

XHTML:

<h:form id="form"> 
    <p:remoteCommand name="removeTechniker" actionListener="#{technikersBean.removeTechniker}" 
        out="technikersTable" /> 

    <p:orderList id="technikersTable" 
       value="#{technikersBean.persons}" 
       var="_techniker" 
       itemValue="#{_techniker}" 
       controlsLocation="none"> 

     <f:facet name="caption">Techniker</f:facet> 

     <p:column> 
      <p:commandButton styleClass="colButton" 
          icon="ui-icon-trash" 
          type="button" onclick="removeTechniker([{name:'name', value:'#{_techniker}'}]);"> 
        </p:commandButton> 
     </p:column> 
     <p:column style="width:75%;"> 
      <p:outputLabel value="#{_techniker}"/> 
     </p:column> 

    </p:orderList> 
</h:form> 

基本上,remoteComand是由一种叫做客户端回调发送请求向bean函数发送信息。