Hi Craig,
I remember a while ago in one of these architecture- theme emails you discussed the OO nature of struts & it had been said that the action-form class and the action class broke the OO encapsulation principle, by having data in one and functionality in another. You said if you were going to design struts again, you would probably address this.


Does JSFaces bring these two closer together? Or is this an area where Faces is not involved? I see you say that in a combination of struts & Faces, you would still use actions and forms.

The reason I ask is that I just had a hard time redesigning a page because my initial design failed. The page allows an edit of one parent object, while showing a list of its child objects with move-to-new-parent / delete controls. I got in a mess initially over whether to use the parent or child's form and action for the child operations.

Fortunately I solved it nicely by nesting the child objects in the parent form, and passing the whole lot to the parent's model, which then worked out if it needed to call the child's model for any operations.


Adam


On 09/16/2003 09:30 PM Craig R. McClanahan wrote:
On Tue, 16 Sep 2003, Sasha Borodin wrote:


Date: Tue, 16 Sep 2003 12:35:22 -0500
From: Sasha Borodin <[EMAIL PROTECTED]>
Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
To: Struts Users Mailing List <[EMAIL PROTECTED]>
Subject: Re: struts-faces

Thanks Craig.


You can, but the integration library lets you use Struts Actions on the
back end, creates form beans automatically, and so on.

Reading through Sun's Web Services Tutorial section on JSF, things are starting to come into focus: JSF provides functionality that overlaps that of Struts (my misconception was that JSF was strictly a UI component tag library).



Yep ... there's quite a bit of overlap, and JavaServer Faces is FAR more
than "a component tag library".


.: Anyone know of a resource that summarizes/contrasts solutions provided by
both frameworks?



I'll throw in a few short comments below, but caution you that this is
based on the EA4 release of JavaServer Faces.  Things are still evolving
rapidly.  (My comments ought to have at least a *little* relevance,
because I'm both the original author of Struts and the co-spec-lead for
JavaServer Faces :-).


i.e.:
   -UI Components


Struts doesn't really have any notion of components at all (the closest
thing is properties of a form bean), while JavaServer Faces has a fairly
rich component model that is accessible at both the Java and JSP levels
(JSP is not required), supports a separate rendering model (so you can
render something like a "select one" control as either a set of radio
buttons or a <select> element with one simple change) and is not tied to
HTML -- although the default render kit included will be HTML specific.
Out of the box, you'll get complex components like a grid and an editable
table, and there are already demonstration components for things like
trees and menus that (in a Struts world) require additional add-on tag
libraries.

For people who have existing Struts expertise and/or applications, this is
the key value add of integrating JavaServer Faces -- you can use the fancy
UI component model without having to change your back-end form beans or
actions.


-controller components


This is where Struts shines, and I assume you're familiar with that.
JavaServer Faces uses a somewhat different abstraction for navigation, and
defers the decision of what page to display next to a NavigationHandler
that is configured with a set of rules -- the next page is determined by
matching rules for:
* The page that is currently being displayed
* Which Action was invoked (for example, you can have
  multiple submit buttons on the page that do different things)
* Which logical "outcome" was returned by the Action that
  was invoked -- sort of like how Struts actions return an
  ActionForward.

JavaServer Faces is more flexible in how you organize your processing
logic -- you can maintain a Struts-like model of separate "form beans" and
"action classes", or you can combine them together (somewhat like how
code-behind pages work in ASP.Net).

Struts has a couple of framework features (Tiles and the Validator
Framework) that are beyond the current scope of JavaServer Faces -- but
one advantage of the integration library is that you'll be able to use
these sorts of technologies together.


-model components


Being presentation frameworks, both technologies are mostly focused on the
view and controller.  The important part becomes how the presentation tier
and model tier object communicate values:

* With Struts, you can use property expressions to navigate
  down a bean hierarchy -- something like:

<bean:write name="customer" property="address.city"/>

* With JavaServer Faces, this is done with "value reference
  expressions" that use the same syntax as JSTL EL expressions.
  The equivalent tag to output a bean property would be:

<h:output_text valueRef="customer.address.city"/>:

* In both technologies, it's possible to evaluate expressions
  like this programmatically in your Java code -- with Struts,
  you use the commons-beanutils package; with JavaServer Faces,
  you use the ValueBinding API.

* With Struts, the framework will automatically create form bean
  instances for you if you want.  If you're using DynaActionForms,
  you can also preconfigure the properties of the created form bean
  using the "initial" attribute.

* With JavaServer Faces, this concept is extended to support creation
  of *any* model tier bean (in any scope), complete with configuring
  the initial properties, using the Managed Bean Creation facility.
  In the example above, I can configure things such that if the "customer"
  object does not already exist, a new instance of a configured class
  will automatically be created, and have its property values also
  configured based on settings in faces-config.xml.


-Page Flow


Neither technology has direct support for page flows.  There are add-ons
for Struts already; I have no doubt that such things will emerge for
JavaServer Faces as well.


-etc.


Because Struts is a fairly popular technology, you'll find quite a lot of
support for it in development tools.  I expect to see the same sort of
thing happen for JavaServer Faces; indeed, at JavaOne this year both Sun
and Oracle did keynote previews of their upcoming development tools that
will be based on JavaServer Faces, and lots of other providers have
promised support for it as well.


Thanks,

-Sasha


Craig McClanahan

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-- struts 1.1 + tomcat 4.1.27 + java 1.4.2 Linux 2.4.20 RH9


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to