Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
DTOInForm
StrutsResumeSupport




JSPWiki v2.2.33

[RSS]


Hide Menu

POJOsToForms


Difference between version 23 and version 1:

At line 1 changed 1 line.
''This is from a [discussion|http://www.mail-archive.com/struts-user%40jakarta.apache.org/msg69836.html] on the struts-user mailing list. I'm continuing it here because I want to propose a new idea: __only converting ActionForms to POJOs__.''
This is from a [discussion|http://www.mail-archive.com/struts-user%40jakarta.apache.org/msg69836.html] on the struts-user mailing list. I'm continuing it here because I want to propose a new idea:
At line 3 changed 1 line.
When I first started developing with Struts (pre 1.0), I'd just have a simple form with a DTO (VO back then) as a getter/setter on my form. In the last year, I've changed to have a DTO and a Form, where the DTO has the true data types (Long, Date, etc) and the form has only Strings. After doing it both ways, it seems like the DTO as a getter/setter is really the better way to go. I'm not trying to say it's the *right* way according to the design patterns, I'm just offering my $.02 from experience. I continue to do it the BeanUtils.copyProperties() way, but the projects I work on that do it the other way seem cleaner.
__Send your [POJO]s to the UI rather than converting them to ActionForms first.__
At line 5 changed 1 line.
For an example of a DTO -> BeanUtils.copyProperties() -> Form, check out the following links:
By this, I mean to say that I'd like to retrieve and display POJOs on the UI, and then capture their information (as ActionForms) when saving the form. The reason I want to do this is because of Hibernate's Lazy Loading feature and formatting Dates. Basically, Hibernate allows you to load children of an object lazily (i.e. resumes of a User), when the {{getResumes()}} method is called.
At line 7 changed 3 lines.
DTO -> User.java (source: http://tinyurl.com/emo7)
Conversion -> UserManagerImpl.java (source: http://tinyurl.com/emof - see convert() method). This extends BaseManager (http://tinyurl.com/emok), which registers custom converters. No DateConverter in this example, but I've done it at my day job, so I know it's fairly easy.
Form -> UserForm.java (generated via XDoclet from User.java)
The issue I'm seeing right now with lazily-loaded properties is that they're loaded when using BeanUtils.copyProperties() is called. I use this to convert POJOs to ActionForms, and consequently the {{getResumes()}} method is called. However, I don't want this. I'd rather the getResumes() method is called when I call it in my code (rather than by a 3rd party conversion utility). Therefore, I'm thinking that passing the POJO to the view is the best solution. Because I'm using the [open-session-in-view pattern|http://hibernate.bluemars.net/43.html], those lazy collections are still available while the JSP is being rendered.
This solves another issue too. It's nice to format dates on the UI, and you need a real date on your form to do this, rather than a String value of a date that's already been converted.
One issue might be with checkboxes, but I can just use the Form for that, right? I haven't tried this yet, but I wanted to write my thoughts down and stir up some discussion on it beforehand.
''You might also be interested in [my blog entry on the subject|http://www.raibledesigns.com/page/rd/20030619#sending_pojos_to_the_ui].''
''Are you saying that you would populate the form manually in the view?'' ~ [mojavelinux]
I suggest looking at Struts' __Nested__ taglib. It does set properties if complex DTO objects
and does not require (semi)manual conversion between strings and actual data types.
With little wrapper to BeanUtilities, which registers a Date handler with desired formatting pattern, it allows correct handling of dates.
__Related Pages:__
* [DTOInForm]
* [Nested Extension|http://keyboardmonkey.com/next/index.jsp]
__Comments:__
----
I know it's not really useful to you, but WebWork gives you this natively. It's one of the big differences between WW and Struts, in that with WebWork you can make true model-driven actions, and then use them in your form.
For example a form field called

Back to POJOsToForms, or to the Page History.