2 Replies Latest reply on Jul 23, 2007 9:52 AM by Daniel Kane

    Changing Seam component properties via Remoting

    Daniel Kane Novice


      I have a Java class that is responsible for some graphics in my web-application. I have turned this class into Seam component. Actually this is session-scoped graphic provider for a4j:mediaOutput element (image) . This works well.

      There is some plain JavaScript code on web-page that changes properties of this component. These changes are implemented via Seam Remoting.

      The problem is following : properties changed in backing stateful bean via Remoting does not change accordingly in the context instance of the component. I guess I need some explicit outjection back to context after Remoting call, but don't know how to program that. Otherwise, any consequent non-remoting invocation of the component turns backing bean into previous state .

      Thanks in advance for explanations.

        • 1. Re: Changing Seam component properties via Remoting
          Shane Bryzak Master

          Seam's bijection features should work just the same within a remoting call as they do with a faces request. Can you please post some code showing what you're trying to do?

          • 2. Re: Changing Seam component properties via Remoting
            Daniel Kane Novice

            There is a lot of code, so only key points :

            Seam Component interface :

            public interface MapImageA4J
             public void setXc(int xc);
             public int getXc();
             public void setYc(int yc);
             public int getYc();
             public void setWidth(int width);
             public int getWidth();
             public void setHeight(int height);
             public int getHeight();
             public void setScale(int scale);
             public int getScale();
             public void drawImage(OutputStream out, Object data) throws Exception;
             public void zoom(double xPercent, double yPercent, double widthPercent, double heightPercent);
             // this method is being called via Remoting and changes values of properties xc, yc, scale, etc.
             public void left();
             public void right();
             public void up();
             public void down();
             public void zoomIn();
             public void zoomOut();
             public void destroy();

            Web - page fragment :

             <s:link action="#{map.left}" value="left"/><br/>
             <s:link action="#{map.right}" value="right"/><br/>
             <s:link action="#{map.up}" value="top"/><br/>
             <s:link action="#{map.down}" value="bottom"/><br/>
             <s:link action="#{map.zoomIn}" value="zoom in"/><br/>
             <s:link action="#{map.zoomOut}" value="zoom out"/><br/>
             <!-- links above works fine and image is being rerendered -->
             <a4j:mediaOutput id="a4map"

            And, the problem point : end of "onmouseup" handler (Javascript):

            function mapStopZoom(evt)
             //... some calculation ...

            zoom method is being called via Remoting, but when I click e.g. "up" or "down" after zoom results falls back.

            I've raised the similar issue in ajax4jsf forum, because I beleive the problem is impossibility to rerender mediaOutput right after remoting call.
            So far have not found a way to rerender a4j object from plain JavaScript.