0 Replies Latest reply on Aug 14, 2008 10:03 AM by Agusti Dosaiguas

    Seam text preview (without page reload)

    Agusti Dosaiguas Newbie

      Hi All,

      This is how I implemented Seam Text preview without reloading the page using Seam Remoting:

      First of all I created a remote method into a session Bean:

      public static String formatSeamText(String text) {
          log.info("text to format {0}", text);
          Reader r = new StringReader(text);
          SeamTextLexer lexer = new SeamTextLexer(r);
          SeamTextParser parser = new SeamTextParser(lexer);
          try {
          } catch (Exception e) {
              return e.getMessage();
          return parser.toString();

      I added the javascript code to be able to call the remote method:

      <script type="text/javascript" src="seam/resource/remoting/resource/remote.js"></script>
      <s:remote include="sessionBean"/>
      <script type="text/javascript">
      // <![CDATA[
          function formatSeamText(text) {
              Seam.Component.getInstance("sessionBean").formatSeamText(text, formatSeamTextCallback);
          function formatSeamTextCallback(result) {
              var outnode = document.getElementById('page:textPreviewDecoration:seamTextPreview');
              var n = outnode.childNodes.length;
              for(var i=0; i < n; i++) outnode.removeChild(outnode.firstChild);
      // ]]>

      And added the code to call te remote function:

      <s:decorate id="textDecoration" template="layout/edit.xhtml">
          <ui:define name="label">text</ui:define>
          <h:inputTextarea id="text"
          <h:commandButton id="preview" 
                           onclick="javascript:formatSeamText(document.getElementById('page:textDecoration:text').value); return false;"/>
      <s:decorate id="textPreviewDecoration" template="layout/display.xhtml">
          <ui:define name="label">text preview</ui:define>
          <s:div id="seamTextPreview"><s:formattedText value="#{sessionBean.instance.text}"/></s:div>

      How would you have implemented this functionality? Is there any remote method already bundled in Seam with the same functionality? How is it implemented in this forum?

      Thank you,