2013-09-02 2 views
1

Я попытался применить a4j: mediaOutput для печати ранее сохраненного файла jpeg. Он не работает с ошибкой bean-scope-error. Я провел несколько тестов по циклу процесса.a4j: outputMedia не удалось распечатать изображение

  1. Файл хранится в базе данных.
  2. Я могу прочитать из базы данных и распечатать изображение в файловой системе, используя FileOutputStream. JPEG выглядит хорошо.
  3. Однако метод краски никогда не срабатывает. Точка останова в System.out никогда не достигается. Это странно, потому что бэк-компонент вызывает метод getter, который я использую для установки атрибута value a4j: mediaOutput. Таким образом, последовательно между обработкой атрибутов value и createContent является ошибка.

Вот мой бобин @ViewScoped.

public void paintHeaderImage(OutputStream stream, Object object) 
       throws IOException { 
      UploadedImage ui = pub.getUploadedImages().iterator().next(); 
      stream.write(ui.getData());  
      stream.close(); 
    } 

Фрагмент JSF/Richfaces.

<a4j:mediaOutput fileName="header.jpg" element="img" createContent="#{pubController.paintHeaderImage}" value="#{pubController.headerImage.pid}" mimeType="image/jpeg" style="width:100px; height:100px;" /> 

Ниже приведена ошибка. Видимо, это происходит после RENDER_RESPONSE (см первой строки журнала)

18:12:22,477 INFO [org.exadel.helper] (http--0.0.0.0-8080-1) AFTER RENDER_RESPONSE 6 
18:12:22,636 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ccms].[Faces Servlet]] (http--0.0.0.0-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException 
    at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:563) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.mgbean.BeanManager.getBeanFromScope(BeanManager.java:240) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:242) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:94) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:244) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31] 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31] 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at org.richfaces.resource.MediaOutputResource.encode(MediaOutputResource.java:62) [richfaces-components-ui-4.3.3.Final.jar:4.3.3.Final] 
    at org.richfaces.resource.UserResourceWrapperImpl.encode(UserResourceWrapperImpl.java:188) [richfaces-core-impl-4.3.3.Final.jar:4.3.3.Final] 
    at org.richfaces.resource.ResourceHandlerImpl.handleResourceRequest(ResourceHandlerImpl.java:229) [richfaces-core-impl-4.3.3.Final.jar:4.3.3.Final] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:591) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_17] 

IMG тег создан, но совершенно долго. Браузер не может получить его, как будто ресурс недоступен.

<img style="width:100px; height:100px;" src="/ccms/rfRes/org.richfaces.resource.MediaOutputResource.jsf?do=eAGFUj1oFEEY!XJwoCFFjD8gEricGhB0lmuS4gxIxJiDiylO!EmwmNv93NtldmcyM3u3GBUbG7EQbAMWtlpZCWlshbMIWqW0EAstxMbY-M0mGtkm2wws773vfe97r75BNdNwdLUd8z5ngqchW-7G6Nvmsw-3Xoybc6ICkCsAqBoNR!ZR81IK5Omwph992tj5XoGRFaj2uciQ0BZGo4SH6MUKQ0XEaUfM2V3uo2G-TJRMMbWsY7nFRSkC1B3eR337!Zu55xvDpQpU2nDYF9yYazxBCxOFP8!58zpWR2nYbMOoIU5QaFg4sYuIpNdBHXER3eNdgc1cufEXaCQzWbpnwNkQaA1Dwa7zcAltTwZXcqXRmEimtKz7RsZocw0nd60TtIzjEz!PzH9esy4hyvAfbl!p5eMnnR8rWxeLDF0MUocs7kpj2ABF4ObfpLcs3J1893FneqxGobbhUEBeQ8rJwqlix9xD4ZUpTXLQKKlnNhJuxILUA64DCq3M2n57!Pfw6eam87cGDylRDXWnwhX3e-jIZUorUaL1i2-Lxv0pF1BBG5yFqdPrKutelqnVUgjUTPEotYvI6bYt14UHAOWm7V3y9daNL18n16!-bVrFwrGiaJFky5lVmSUg8sTCePH7v5YqlQ!uwKpHl5OZpnJ5gygI6bQe7Y4LmRAs79lE1C41ZmfOz8zWfBKy6GxS!-bqB5qu59TlXrEFi1X4B2oTIgI_" id="j_idt18:pubFormE:j_idt63"> 
+1

Я не использую RichFaces, но под крышками эта проблема, несомненно, имеет те же основания, что и этот, с PrimeFaces '' из-за способа работы HTML и HTTP: http: // stackoverflow .com/questions/8207325/display-image-from-database-with-pgraphicimage/12452144 # 12452144 Конечно, '' также генерирует '', что, в свою очередь, позволяет веб-браузеру запускать совершенно новый и полностью отдельный HTTP запрос для загрузки содержимого. – BalusC

ответ

1

Ok. Понял. Я изменил бэкбон до сеанса. Теперь это работает.

Для плавного решения необходимо извлечь изображение, загружаемое и передающее потоковое изображение с помощью экстра-бэк-компонента с более широкой областью. В соответствии с рекомендациями @BalusC:

  • вы передаете ссылочный ключ к атрибуту a4j value: mediaOutput.
  • пункт createContent указывает на метод в вашем объекте @SessionScoped или @ApplicationScoped.
  • метод извлекает value и извлекает изображение из вашего источника персистентности (DB, файловая система, облако, вы называете его) и возвращает поток.

И здесь его ссылка. Display dynamic image from database with p:graphicImage and StreamedContent

Смежные вопросы