10 Replies Latest reply on Aug 22, 2011 3:02 AM by cooper_lyt

    Problems with seam taglib

    micnight

      Hi everybody,

       

      I'm quietly new to GateIn+JBoss PortletBrigde. I'm facing a problem when using the seam taglib to load dynamically graphic images in this way:

       

       

      {code:xml}

      <s:graphicImage value="/img/dyfa-water.png">

             <s:transformImageSize width="50" maintainRatio="true" />

      </s:graphicImage>

      {code}

       

      Then I get the following error stack trace when the portlet is rendered:

       

      {quote}

      16:44:10,230 ERROR [[Seam Resource Servlet]] Servlet.service() for servlet Seam Resource Servlet threw exception

      java.lang.IllegalStateException: No phase id bound to current thread (make sure you do not have two SeamPhaseListener instances installed)

          at org.jboss.seam.contexts.PageContext.getPhaseId(PageContext.java:163)

          at org.jboss.seam.contexts.PageContext.isBeforeInvokeApplicationPhase(PageContext.java:175)

          at org.jboss.seam.contexts.PageContext.getCurrentWritableMap(PageContext.java:91)

          at org.jboss.seam.contexts.PageContext.remove(PageContext.java:105)

          at org.jboss.seam.Component.newInstance(Component.java:2167)

          at org.jboss.seam.Component.getInstance(Component.java:2024)

          at org.jboss.seam.Component.getInstance(Component.java:2003)

          at org.jboss.seam.Component.getInstance(Component.java:1997)

          at org.jboss.seam.Component.getInstance(Component.java:1970)

          at org.jboss.seam.Component.getInstance(Component.java:1965)

          at org.jboss.seam.faces.FacesPage.instance(FacesPage.java:92)

          at org.jboss.seam.core.ConversationPropagation.restorePageContextConversationId(ConversationPropagation.java:84)

          at org.jboss.seam.core.ConversationPropagation.restoreConversationId(ConversationPropagation.java:57)

          at org.jboss.seam.servlet.ContextualHttpServletRequest.restoreConversationId(ContextualHttpServletRequest.java:111)

          at org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:55)

          at org.jboss.seam.ui.graphicImage.GraphicImageResource.getResource(GraphicImageResource.java:46)

          at org.jboss.seam.servlet.SeamResourceServlet.service(SeamResourceServlet.java:80)

          at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

          at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)

          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

          at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)

          at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)

          at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)

          at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)

          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

          at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)

          at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:402)

          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)

          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)

          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)

          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

          at java.lang.Thread.run(Thread.java:662){quote}

       

      Is there a possibility to solve this? Or is there a possibility to render images dynamically in another way? The goal is to load later images directly from the database, i.e. binary objects. Any help would be appreciated.

       

      Regards,

      Michael

        • 1. Problems with seam taglib
          stefan_tausendpfund

          Hi Michael,

           

          did you also try the a4j:mediaOutput of richfaces? This component enables you to display loaded images from a database.

          Here a link to the online demo:

          http://livedemo.exadel.com/richfaces-demo/richfaces/mediaOutput.jsf

          regards

            Stefan

          1 of 1 people found this helpful
          • 2. Problems with seam taglib
            micnight

            Hi Stefan,

             

            thank you for your immedaite response. Your proposal worked to integrate dynamically images into my JSF. Anyway, the seam taglib does not work when using the portlet bridge. But using richfaces is an appropriate way arround.

             

            Thank you.

             

            Kind regards,

            Michael

            • 3. Problems with seam taglib
              wesleyhales
              • 4. Re: Problems with seam taglib
                micnight

                Hi Wesley,

                 

                it's not only the graphic-tag, which does not work. It seems that the same bug appears when using <s:fileUpload/>. Is there another possibility to upload some files with Seam and Portlet Bridge? I also tried <rich:fileUpload/>, which causes the same error. Is there a way to handle PortletActionRequests and PortletResourceRequests directly with JBoss Portlet Bridge, because I really need to get the upload functionality running very soon?

                 

                Here is once again the stacktrace:

                {quote}

                Caused by: javax.portlet.faces.BridgeException: Error processing resource lifecycle

                    at org.jboss.portletbridge.ExceptionHandlerBase.processResourceException(ExceptionHandlerBase.java:91)

                    at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:836)

                    at javax.portlet.faces.GenericFacesPortlet.serveResource(GenericFacesPortlet.java:541)

                    ... 134 more

                Caused by: javax.faces.FacesException: org.gatein.pc.portlet.impl.jsr168.api.ResourceRequestImpl cannot be cast to javax.servlet.ServletRequest

                    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:86)

                    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

                    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

                    at org.jboss.portletbridge.AjaxPortletBridge.execute(AjaxPortletBridge.java:1163)

                    at org.jboss.portletbridge.AjaxPortletBridge.doFacesRequest(AjaxPortletBridge.java:825)

                    ... 135 more

                Caused by: java.lang.ClassCastException: org.gatein.pc.portlet.impl.jsr168.api.ResourceRequestImpl cannot be cast to javax.servlet.ServletRequest

                    at org.jboss.seam.ui.renderkit.FileUploadRendererBase.doDecode(FileUploadRendererBase.java:65)

                    at org.jboss.seam.ui.util.cdk.RendererBase.decode(RendererBase.java:59)

                    at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:789)

                    at javax.faces.component.UIInput.decode(UIInput.java:725)

                    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1031)

                    at javax.faces.component.UIInput.processDecodes(UIInput.java:639)

                    at javax.faces.component.UIForm.processDecodes(UIForm.java:209)

                    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)

                    at org.richfaces.component.UISimpleTogglePanel.processDecodes(UISimpleTogglePanel.java:119)

                    at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)

                    at org.ajax4jsf.component.AjaxViewRoot$1.invokeContextCallback(AjaxViewRoot.java:400)

                    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:240)

                    at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:417)

                    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)

                    ... 139 more

                {quote}

                 

                Here is my JSF-Code:

                 

                {code:xml}

                <h:form id="form" enctype="multipart/form-data">

                     <h3>Upload file</h3>

                            Select a picture for upload<br />

                     <s:fileUpload id="file" data="#{generalEmpActions.file}"

                                 accept="image/jpeg" />

                     <rich:fileUpload

                         fileUploadListener="#{generalEmpActions.pictureUploadListener}"

                         maxFilesQuantity="1" id="pictureUpload" immediateUpload="#{true}"

                         acceptedTypes="jpg" allowFlash="#{false}">

                     <a:support event="onuploadcomplete" reRender="realPicture,anonymousPicture" />

                      </rich:fileUpload>

                     <a:commandButton id="show" action="#{searchEmpActions.showUpload()}" value="Go" reRender="realPicture,anonymousPicture"/>

                </h:form>

                {code}

                 

                And my code in the corresponding Bean for the uploadListener:

                 

                 

                {code}

                public void pictureUploadListener(UploadEvent event) throws Exception {

                        UploadItem item = event.getUploadItem();

                        if(item == null)

                            log.error("This should not happen: UploadItem is null");

                        Document picture;

                        this.currentEmployee = new Employee();

                        if (this.currentEmployee.getPicture() != null)

                            picture = this.currentEmployee.getPicture();

                        else

                            picture = new Document();

                        if (item.getData().length > 5242880) {

                            facesMessages.addFromResourceBundle(Severity.ERROR,

                                    "com_dyfa_cip_session_filetoolarge", "5MB");

                            return;

                        }

                        picture.setSize((long) item.getData().length);

                        picture.setDocumentName("picture_new");

                        picture.setData(item.getData());

                        picture.setDescription("employee's picture");

                        picture.setContentType("image/jpeg");

                        picture.setChangedDate(Calendar.getInstance().getTime());

                        this.currentEmployee.setPicture(picture);

                        facesMessages.addFromResourceBundle(Severity.INFO,

                                "com_dyfa_cip_session_emp_pic_added");

                    }

                {code}

                 

                I hope, somebody can help me.

                 

                Thanks in advance.

                 

                Cheers,

                Michael

                • 5. Problems with seam taglib
                  stefan_tausendpfund

                  Hi Michael,

                   

                  multipart requests are not handled for seam components. Remove the s:fileUpload inside the form then upload works fine. If you're using GateIn you will need to use the 2.1.0-SNAPSHOT release (actual svn trunk build). There is a bugfix PBR-212 included needed for Gatein portal.

                   

                   

                  regards

                    Stefan

                  • 6. Re: Problems with seam taglib
                    micnight

                    Hello Stefan,

                     

                    and again you saved my day. Thank you very much. After building the portlet-bridge-snapshot from source everything works now as expected. One important information for displaying pictures which are stored in the database: Please look here http://community.jboss.org/docs/DOC-14811. This was also very useful.

                     

                    regards,

                    Michael

                    • 7. Re: Problems with seam taglib
                      cooper_lyt

                      need help

                       

                      i use rich:fileUpload  but fileUploadListener  is never called ,why

                       

                      i use portletBridge 2.1.0.FINAL

                      • 8. Re: Problems with seam taglib
                        cooper_lyt

                        portletBridge 2.1.0.FINAL is not work

                        i use svn checkout 2.1.2.GA.EPP51 now it's work

                        • 9. Re: Problems with seam taglib
                          axa_mx

                          Hi Cooper i cant find 2.1.2.GA.EPP51, can you help me

                          • 10. Re: Problems with seam taglib
                            cooper_lyt