dev@woodstock.java.net

Woodstock release 4.2 (- Build 4) and the "improved Javascript performance"

From: Benjamin Kersten <benjamin.kersten_at_s3.uni-due.de>
Date: Thu, 13 Mar 2008 12:44:55 +0100

Dear Woodstock team,

I am developing custom JSF Components with the Woodstock-JSF-Framework
and I've got a few questions for the current Woodstock release 4.2 (-
Build 4) and the "improved Javascript performance". This performance
gain is reached by lazy loading of JSON-, Prototype- and
DynaFaces-Javascript-files. In your discussion forum you promote this as
a reduced overall footprint of 614kb. I placed a required text field
with autoValidation in my page and recognized a dynamic reload of about
another 550kb (i.e. JSON, Prototype, DynaFaces) onBlur. Honestly, will
there be any Woodstock JSF applications without AJAX? Hopefully not, so
JS-lib-loading is just deferred, not reduced.
The disadvantage of that "new feature" for my purposes is that I made
use of Prototype functions and DynaFaces AJAX requests (with JSON as
datainterchange format) in JS-parts of my custom JSF components and I
did not appreciate to recognize that my components failed to work
because of the missing JS libraries with the current release.
There are several ways to handle this (as mentioned in the release notes):

    * Load Prototype via the <jsfx:scripts/> tag of jsf-extensions:
          o My customer (user of my custom JSF component) would have to
            include the jsfx-namespace and jsfx-script tag into the
            page, just to make my component working
          o he (or my custom component jar) would also have to include
            shale-remoting.jar, as jsfx:scripts makes use of
            "org/apache/shale/remoting/XhtmlHelper" and throws a
            ClassNotFoundException if not included (if I did not miss
            s.th. this is not even mentioned in the 4.2 Build 2 release
            notes)
    * Direct use of the ScriptsComponent.class of jsf-extensions
      (included in my custom JSF component so that the end user does not
      have to insert additional tags)
          o works for inital page load
          o ScriptsComponent.class throws "java.lang.ClassCastException:
            [Ljava.lang.Object; cannot be cast to java.util.Map" in its
            restoreState method
          o => not working, did not debug yet
    * in addition to that JSON is still missing (when loading Prototype
      and DynaFaces via jsfx:scripts) and I considered another possibility:
    * I could force to load them using <webuijsf:script url="..."/> or
      via direct use of the Script.class in my custom component (which
      would cause additional overhead to check that the libraries are
      loaded only once if the component is used multiple times in the
      page). However, this is not the neat way AND... ( some off-topic
      my 1st question:)
          o 1) ...this way I would have to load the JS files via the
            /theme/...-path (ThemeServlet). Some time ago I already
            asked myself if this is a security flaw as I can read ALL
            files via /theme, including my WEB-INF-files (web.xml,
            faces-config.xml, ...) and I regocnized that accessing these
            files is not possible on productive Woodstock sites. Is
            there a common way to control access via the ThemeServlet?


*Back to the missing JS files: Due to the points mentioned above my most
important question:
2) **_How can I dynamically reload the three JS files (Prototype, JSON,
DynaFaces) on my first AJAX request as you do it?_ Is there a
JS-function to call in your bootstrap.js API? How can I do this...
2a) with DOJO
2b) without DOJO
*In particular 2b) is important for me. Besides I don't like the DOJO
approach of client side replacement/rendering of JS objects at all in
general, I'm developing a component dealing with large data grids which
performed bad when handling the grid with JS. Because of that, I don't
use DOJO but the IMHO "typical way" of JSF, i.e. server side component
rendering (of HTML).

3) Why are these important functions (e.g. JS function to reload the
three JS files) not clearly documented? I've already had problems to
find information with respect to different issues several times... Is
the documentation pretty incomplete or did I just miss some important
web pages except for the woodstock project pages? Refering to the
current problem the roadmap just announced a "custom dojo.jar", the lazy
loading of DOJO, Prototype and DynaFaces was on short notice with the
4.2 Build 2 release in the release notes and "hidden" in a discussion
forum thread called "Preformance". Furthermore and most important I
could not find a single page describing the issue of my "question 2".
When trying to get information by debugging I have to handle
compressed/obfuscated one-line JS-files of Woodstock (as usual I must
admit). Unfornately, these points combined make development with
Woodstock costly in terms of time (and pretty ugly sometimes).

4) Where should I have posted / discussed these issues if not via email?
Is there no public user forum like offered by different
3rd-party-JSF-libs? Although I have a java.net account, I may not post
to the discussion forum but have to join projects to become an observer
in the first stage?

Thanks in advance for help...
Kind regards

-------------------------------------------------------------------------
Benjamin Kersten
University of Duisburg-Essen, ICB Phone: +49 (201) 183 - 4683
Specification of Software Systems Fax: +49 (201) 183 - 4698
Schützenbahn 70 Email: benjamin.kersten_at_s3.uni-due.de
D-45117 Essen, Germany Web: http://www.s3.uni-due.de
-------------------------------------------------------------------------