myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ji Kim (JIRA)" <>
Subject [jira] Updated: (TOMAHAWK-1250) Adobe Flex components as MyFaces JSF components
Date Thu, 08 May 2008 03:23:55 GMT


Ji Kim updated TOMAHAWK-1250:

    Status: Patch Available  (was: Open)

> Adobe Flex components as MyFaces JSF components
> -----------------------------------------------
>                 Key: TOMAHAWK-1250
>                 URL:
>             Project: MyFaces Tomahawk
>          Issue Type: New Feature
>         Environment: Have tested using os [windows xp], browsers [firefox 2.0, opera
9.25, ie 6.0], and app server [tomcat 5.5.23].
>            Reporter: Ji Kim
>         Attachments: mxmlComp.patch,, mxmlExamplescreenshot-1.jpg, patchZip.txt
> I wished to contribute set of components to give users capability in creating Adobe Flex
components as MyFaces JSF components. So users would create the components as normal JSF components
and the contribution will create the necessary SWF files and etcetera and link the values
of the components back to the managed beans using JSON+Javascript and etcetera.
> The components require Adobe Flex SDK to be extracted to C:\Program Files\flexSDK or
> Optionally users can modify the mxmlConstants.xml or can pass the directory as a JVM
parameter mxmlc_bin
> Requires ANT during compile time, so have modified the sandbox's POM with the dependency.
> Have tested using FireFox 2.0, Opera 9.25, and IE 6.0 browsers with TomCat 5.5. Also
have used Sun's JDK for Adobe Flex SDK [JAVA_HOME].
> The basic design is as follows [will implement it better later] :
> (1)	All Flex components must be nested within <s:mxmlApplication /> tag as it is
the top component and this tag must be outside the <h:form /> component [due to IE's
>           use of objects].
> (2)	There exists replaceMapping XMLs which will tell how to pick the fields from the
components [i.e. by attributes of the UIComponent or by method call for that object].
> (3)	There exists templates [users can modify it if they wish to have some default capability
to all similar component] which will be used per component to create preMxml 
>           files. In a nutshell, it is nothing but a simple file that contains tokens
which will be replaced by component values using the replaceMapping XML and ANT's Replace

>           Task.
> (4)	Necessary source files will be created to their respective directory [i.e. ActionScript
file[s] that is/are needed by the system and XML file[s] that is/are needed by the 
>           ActionScript files[s] and should be defined within mxmlConstants.xml]
> (5)	After all the components' preMxml within <s:mxmlApplication /> have been created,
MXML file and SWF file will be created using ANT by the MXMLApplication class. 
>           <s:mxmlScript /> will give capability in writing ActionScript	contents
as the body content of the Tag by extending UIComponentBodyTagBase. Similar flexibility is
given to 
>           other	Tags by extending MXMLUIComponentBodyTagBase; however it should be used
sparingly and should be used mainly for components that extend 
>           MXMLUISimpleBase component. One additional thing to note is that mxmlPackageName
attribute for <s:mxmlApplication /> tag will be used to name the mxml file and 
>           the swf file.
> (6)	Also <s:mxmlApplication /> will create JSON objects which will be rendered
onto the page for initial values of the Flex components.  The reason for this is because 
>           <s:mxmlApplication /> has various modes :
> 		debugMode	=>  meaning preMxml, Mxml, and SWF files would be created in each run
as well as JSON objects
> 		simplySWF	 =>  meaning Mxml which has been modified by the user exists, so create
only SWF files and JSON objects [users can use this to modify the mxml 
>                                                    file and create a swf file]
> 		productionEnv	=> meaning SWF file already exists, so nothing to do here but create
JSON objects [this is the default value to ensure that users do not run the 
>                                                   components in either of the two other
modes in an environment that is higher than dev]. One thing to note is that all directories
>                                                   WebContent/swf/* should be copied to
their corresponding directory within the Workspace during the move to higher env [since the

>                                                   system uses servContext.getRealPath(new
String()) as the root directory of preMxml, Mxml, and swf directory and TomCat for example
flushes it  
>                                                   out to their cache directory under
> 	 For large components such as DataGrid, am planning to write it as a service in retrieving
and setting the values
> (7)   Uses dojo during the onLoad time to connect all the Form's onsubmit event with
a pageUnload function.
> 	Also each Flex/Flash app will communicate back to the page when it has finished setting
up on its side [such as	setting callBack methods and etcetera], JSON will be 
>         passed to the apps to set the initial values with the check interval set to 500
milliseconds. So the values will be decoded [for example htmlText allows XML tags and 
> 	etcetera, so on the Java side there will be encoding and decoding on the Flex/Flash
side] and set to the component's values.
> (8)   During the form's onsubmit action, pageUnload will return false and make a call
to Flex/Flash app to return the component's values to the page. When returned, nodes 
>         will be appended to the form that was in the process of	submission and will submit
the page 
> 	On the Flex/Flash side, there will be an ActionScript which will use E4X [love it] to
look up within an XML file the property/attributes that the component must return as 
>         JSON objects to the page, so that the page can create the elements with their
attributes as child nodes of the form element.
> Will write this better later and will plan on making the code much cleaner and better
during free time, but wanted to see if this is something that could be considered as a contribution
within the group. Thanks!!!
> Oh yes, one note regarding preMxml files. In order to keep everything simple and debugging
easy, a simple method was chosen to create the preMxml files for each component. Namely the
file with mxmlPackageName_[Major Num][Minor Num].pre_mxml will be created per component within
directory named WebContent/preMxml/[mxmlPackageName]/. So for instance, MxmlApplication will
have Major Num and Minor Num set to 0 and the first child of MxmlApplication will have [1,0]
set with it's sibling set to [1,1] and etcetera. Due to how it's written, there maybe an issue
such that when depth equals a certain value and the components within that depth has 3 digits.
> For example,
> 	001121	this can mean 
> 		(1) major level 1 with minor level 121 {meaning there exists at least 120 components
within the swf}
> 		(2) major level 2 with minor level 1 {meaning this is a child of [1,1] and the second
sibling with depth two}
> 	Since issues with this kind of scenario will occur when (1) doesn't exist [meaning sibling
120 exists and 121 is placeholder] and (2) exists [meaning [2,1] exists], this will 
>         be very rare. Also if someone has over 100+ components within a single swf file,
I think it should be reconsidered and rewritten.
> I will possibly considering writing more regarding it later during my free time. Thanks!!!

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message