2017-11-29 3 views
0

Zusammenfassung: Ich habe ein etwas komplexes JSF-Formular mit einer Liste von Dokumenten entwickelt und möchte nun in jeder Zeile eine Schaltfläche hinzufügen dieser Liste, mit der Sie die Dokumentdatei herunterladen können. Primefaces bietet dafür eine attraktive Lösung, also konvertiere ich die ganze Seite nach und nach in die Verwendung von Primefaces, aber im Moment habe ich gerade die Tabelle der Dokumente konvertiert - das funktioniert gut, obwohl es seltsam aussieht. Mein Problem ist, dass ich eine Ausnahme erhalte, wenn ich die p:commandButton hinzufüge, und ich weiß nicht einmal, was es bedeutet - soweit ich das beurteilen kann, folge ich den Beispielen, die ich finden konnte, einschließlich der Vitrinen von Primefaces :org.primefaces.component.column.Column kann nicht in javax.faces.component.ActionSource umgewandelt werden

org.primefaces.component.column.Column cannot be cast to javax.faces.component.ActionSource 

Hier sind die Details Tabelle

<h:form id="doclistform"> 
    <p:dataTable value="#{documentsController.documentList}" var="doclst" 
       id="doclist"> 
     <!-- innocent columns --> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="Download"/> 
      </f:facet> 
      <p:fileDownload value="#{doclst.docfile}"/> 
     </p:column> 
    </p:dataTable> 
</h:form> 

die Ausnahme in der server.log:

[2017-11-29T09:27:33.935+0000] [glassfish 5.0] [FATAL] [jsf.context.exception.handler.log] [javax.enterprise.resource.webcontainer.jsf.context] [tid: _ThreadID=31 _ThreadName=http-listener-1(5)] [timeMillis: 1511947653935] [levelValue: 1100] [[ 
    JSF1073: java.lang.ClassCastException caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=org.primefaces.component.column.Column cannot be cast to javax.faces.component.ActionSource]] 

[2017-11-29T09:27:33.936+0000] [glassfish 5.0] [FATAL] [] [javax.enterprise.resource.webcontainer.jsf.context] [tid: _ThreadID=31 _ThreadName=http-listener-1(5)] [timeMillis: 1511947653936] [levelValue: 1100] [[ 
    org.primefaces.component.column.Column cannot be cast to javax.faces.component.ActionSource 
java.lang.ClassCastException: org.primefaces.component.column.Column cannot be cast to javax.faces.component.ActionSource 
     at org.primefaces.component.filedownload.FileDownloadTagHandler.apply(FileDownloadTagHandler.java:56) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:161) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:135) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:96) 
     at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:94) 
     at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:88) 
     at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:162) 
     at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:381) 
     at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:102) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:223) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671) 
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1580) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:258) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:652) 
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591) 
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) 
     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238) 
     at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463) 
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168) 
     at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 
     at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
     at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242) 
     at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
     at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
     at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
     at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
     at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
     at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
     at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539) 
     at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
     at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
     at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
     at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
     at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593) 
     at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573) 
     at java.lang.Thread.run(Thread.java:745) 
+0

Das nächste Mal, wählen Sie bitte eine [MCVE] ... Art und Weise zu viel irrelevant Code in Ihrem Beitrag – Kukeltje

+0

@Kukeltje erstellen Danke für den Link, ich habe eine Bearbeitung für diese Frage eingereicht und sollte deinen Link hinzugefügt haben. Ich werde im Hinterkopf behalten – Al1

Antwort

2

Wenn Sie bei PrimeFaces showcase anschauen, werden Sie feststellen, dass <p:fileDowload> ist in einem <p:commandButton> Tag eingebettet: Der Download der Datei benötigt eine Aktion Quelle (wie der Fehler erwähnt), um den Download auszulösen.

Wickeln Sie einfach Ihre p:fileDownload mit einer p:commandButton.

<p:column> 
    <f:facet name="header"> 
     <h:outputText value="Download"/> 
    </f:facet> 
    <p:commandButton value="Download" ajax="false"> 
     <p:fileDownload value="#{doclst.docfile}"/> 
    </p:commandButton> 
</p:column> 

Wenn mit Datei-Download-Handling, sicherstellen, dass:

  1. die p:commandButton hat ajax="false" Attribut
  2. der p:fileDownload Wert ist nicht das File Objekt, sondern ein StreamedContent

Unrelated zum Download, aber Sie können Ihren Code mithilfe des headerText Attribut p:column vereinfachen:

<p:column headerText="Download"> 
    <p:commandButton value="Download" ajax="false"> 
     <p:fileDownload value="#{doclst.docfile}"/> 
    </p:commandButton> 
</p:column> 
+0

Al1 - Vielen Dank für Ihre Antwort, und nicht darauf hinweisen, dass ich @ * & $$ sein muss! blind, um das nicht selbst zu sehen :-) – j4nd3r53n

Verwandte Themen