Author: afedosik
Date: 2008-04-23 11:03:59 -0400 (Wed, 23 Apr 2008)
New Revision: 7711
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam1.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam10.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam11.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam12.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam13.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam14.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam15.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam16.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam17.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam18.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam19.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam2.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam20.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam21.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam23.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam24.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam25.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam26.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam27.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam28.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam29.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam3.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam30.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam31.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam32.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam33.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam34.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam35.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam36.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam37.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam38.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam39.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam4.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam40.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam41.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam42.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam43.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam44.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam45.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam46.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam47.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam48.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam49.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam5.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam6.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam7.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8_1.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam9.png
Removed:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_1.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_10.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_11.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_12.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_13.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_14.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_15.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_16.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_17.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_18.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_19.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_2.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_3.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_4.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_5.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_6.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_7.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_8.png
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_9.png
Modified:
trunk/documentation/guides/GettingStartedGuide/en/modules/first_seam.xml
Log:
http://jira.jboss.com/jira/browse/JBDS-310 hands-on lab presentation placed in "Write
your first project" chapter (draft version).
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam1.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam10.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam10.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam11.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam11.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam12.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam12.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam13.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam13.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam14.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam14.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam15.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam15.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam16.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam16.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam17.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam17.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam18.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam18.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam19.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam19.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam2.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam20.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam20.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam21.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam21.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam23.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam23.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam24.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam24.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam25.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam25.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam26.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam26.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam27.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam27.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam28.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam28.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam29.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam29.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam3.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam30.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam30.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam31.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam31.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam32.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam32.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam33.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam33.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam34.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam34.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam35.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam35.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam36.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam36.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam37.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam37.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam38.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam38.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam39.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam39.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam4.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam4.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam40.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam40.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam41.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam41.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam42.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam42.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam43.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam43.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam44.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam44.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam45.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam45.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam46.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam46.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam47.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam47.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam48.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam48.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam49.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam49.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam5.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam5.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam6.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam6.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam7.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam7.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8_1.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam8_1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam9.png
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam9.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_1.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_10.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_11.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_12.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_13.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_14.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_15.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_16.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_17.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_18.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_19.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_2.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_3.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_4.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_5.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_6.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_7.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_8.png
===================================================================
(Binary files differ)
Deleted:
trunk/documentation/guides/GettingStartedGuide/en/images/first_seam/first_seam_9.png
===================================================================
(Binary files differ)
Modified: trunk/documentation/guides/GettingStartedGuide/en/modules/first_seam.xml
===================================================================
--- trunk/documentation/guides/GettingStartedGuide/en/modules/first_seam.xml 2008-04-23
14:41:46 UTC (rev 7710)
+++ trunk/documentation/guides/GettingStartedGuide/en/modules/first_seam.xml 2008-04-23
15:03:59 UTC (rev 7711)
@@ -9,544 +9,865 @@
</keywordset>
</chapterinfo>
- <title>Write Your First Seam Web Application</title>
+ <title>Write Your First Project</title>
+
+ <para>This chapter is a set of hands-on labs. You get step-by-step information
about how the JBoss Developer Studio can be used during the development
process.</para>
- <para>The JBoss Developer Studio provides sophisticated tools for enterprise
applications. With
- the JBoss Developer Studio, you can get started very quickly with a web prototype,
and then
- scale up your application to include enterprise features (e.g., business processes,
web
- services, etc.) using the same developer tools. It is a "scalable"
RAD (Rapid
- Application Development) tool.</para>
-
- <para>A core element that makes the JBoss Developer Studio
"scalable" is the
- <property>JBoss Seam</property> framework.</para>
-
- <para>The main purpose of this chapter is to tell you about build a simple Seam
web application in minutes with the JBoss Developer Studio.</para>
-
- <section>
- <title>Create a Seam Project</title>
- <para>This section helps you to create a simple Seam project.</para>
- <para>To create a new web application in <property>Seam</property>,
you should create a Seam web
- project. This section provides all the necessary steps to organize a new project
with appropriate
- tooling and adjust the settings that match your needs. In order to find out more
information, see <ulink url="../../seam/html_single/index.html">Seam Dev
Tools Reference guide</ulink></para>
- <para>First, select <emphasis>
- <property>New > Project ... > Seam > Seam Web
Project</property>
- </emphasis>. You will be prompted to enter a name and a location directory
for your new
- project. The wizard has an option for selecting the actual Server (and not just WTP
runtime)
- that will be used for the project. This allow the wizard to correctly identify
where the
- needed datasource and driver libraries need to go.</para>
-
+<section id="create_seam_application">
+ <title>Create a Seam Application</title>
+
+ <para>In this section you get to know how to create a Seam project in JBDS, how
to start the server and what a structure your project has after creating.</para>
+
+ <section id="start_dev_db">
+ <title>Start Development Database</title>
+
+ <para>Before opening JBoss Developer studio, let’s start the workshop database.
Open up a terminal window
+ and start up the HSQLDB database.</para>
+ <para>To start the database just run
<property>./runDBServer.sh</property> or
<property>runDBServer.bat</property> from the database
directory.</para>
+ <para>The end result should be a console window that looks like:</para>
+
<figure>
- <title>Create a Seam Project</title>
+ <title>Starting DataBase</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_1.png"/>
+ <imagedata fileref="images/first_seam/first_seam1.png"/>
</imageobject>
</mediaobject>
</figure>
+
+ </section>
- <para>Next, you will be asked to select the "features" you
want to use in your
- project. This allows JBoss Developer Studio to setup the appropriate tooling for
your project.
- Since JBoss Seam integrates all popular Java EE frameworks, you can select any
combination of
- technologies from the list. Here, for this project, we will select Dynamic Web
Module, Java,
- JavaServer Faces (JSF), and Seam Facet for a typical database-driven web
application. </para>
-
+ <section id="create_deploy_seam">
+ <title>Create and deploy Seam Web Project</title>
+
+ <para>Minimize the terminal window and run the JBoss Developer Studio from
Applications Menu or from the desktop icon.</para>
+ <para>First of all you get the Workspace Launcher. Change the default workspace
location if it's needed. Click on <property>Ok</property>.
+ </para>
+
<figure>
- <title>Select Toolings for the Project</title>
+ <title>Workspace Launcher Dialog</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_2.png"/>
+ <imagedata fileref="images/first_seam/first_seam2.png"/>
</imageobject>
</mediaobject>
</figure>
- <para>In this screen you can also bring up server runtimes panel by clicking
<emphasis>
- <property>Show Runtimes</property>
- </emphasis> in the bottom right corner. This panel shows available server
runtimes. Then this
- button will be changed into <emphasis>
- <property>Hide Runtimes</property>
- </emphasis> one.</para>
- <para>Click <emphasis>
- <property>Next</property>
- </emphasis> to proceed further.</para>
+
+ <para>After startup, you see the welcome page. You could read how to work with
welcome pages in <link linkend="Welcome">previous</link> chapter.
+ Now select <property>Create New...</property> icon and then press on
<property>Create Seam Project</property> link.</para>
+
+ <para>The New Seam Project wizard is started. You need to enter a name (e.g.,
"workshop") and a location directory for your new project.
+ The wizard has an option for selecting the actual Server (and not just WTP runtime)
that will be used for the project.
+ This allow the wizard to correctly identify where the needed datasource and driver
libraries need to go. All settings are already specified.
+ Click on <property>Next</property>.</para>
+
<figure>
- <title>Available Server Runtimes</title>
+ <title>New Seam Project Wizard</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_19.png"/>
+ <imagedata fileref="images/first_seam/first_seam3.png"/>
</imageobject>
</mediaobject>
</figure>
- <para>A dynamic web application contains both web pages and Java code. The
wizard will ask you
- where you want to put those files. You can just leave the default values or choose
another folder.</para>
-
+
+ <para>Next, you will be asked to select the "features" you want to
use in your project. This allows JBoss Developer Studio to setup the
+ appropriate tooling for your project. Since JBoss Seam integrates all popular Java
EE frameworks, you can select any combination of
+ technologies from the list. Here, for this project, we will select Dynamic Web
Module, Java, JavaServer Faces (JSF), and Seam Facet for
+ a typical database-driven web application. The default project facets should
suffice, click on <property>Next</property>.</para>
+
<figure>
- <title>Select Directory Names for Web Pages and Java Files</title>
+ <title>Project Facets Specifying</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_3.png"/>
+ <imagedata fileref="images/first_seam/first_seam4.png"/>
</imageobject>
</mediaobject>
</figure>
-
-
- <para>On the next form, you will be able to select where those library JARs
come from. The
- easiest is just to select the JARs provided by the JBoss AS runtime associated with
this
- project. That is why it is important to chose the right JBoss AS 4.2 runtime in the
project
- setup window.</para>
- <orderedlist continuation="continues">
+
+ <para>In this screen you can also bring up server runtimes panel by clicking
<property>Show Runtimes</property> in the bottom right corner.
+ This panel shows available server runtimes. Then this button will be changed into
<property>Hide Runtimes</property> one.</para>
+ <para>Click <property>Next</property> to proceed
further.</para>
+
+ <figure>
+ <title>Runtimes Selecting</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam5.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>A dynamic web application contains both web pages and Java code. The
wizard will ask you where you want to put those files.
+ You can just leave the default values or choose another folder.</para>
+
+ <figure>
+ <title>Web Module Settings</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam6.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>On the next form, you will be able to select where those library JARs
come from. The easiest is just to select the JARs provided by
+ the JBoss AS runtime associated with this project. That is why it is important to
chose the right JBoss AS 4.2 runtime in the project setup window.</para>
+ <itemizedlist>
<listitem>
- <para>Check <emphasis>
- <property>Server Supplied JSF Implementation</property>
- </emphasis>. We will use <ulink
url="../../seam/html_single/index.html#addJSFCapab">JSF
implementation</ulink> that comes with JBoss server</para>
+ <para>Check <emphasis><property>Server Supplied JSF
Implementation</property>.
+ </emphasis>We will use <ulink
url="../../seam/html_single/index.html#addJSFCapab">JSF
implementation</ulink> that comes with JBoss server</para>
</listitem>
<listitem>
- <para>Click <emphasis>
- <property>Next</property>
- </emphasis></para>
+ <para>Click
<emphasis><property>Next</property></emphasis></para>
</listitem>
- </orderedlist>
+ </itemizedlist>
+
<figure>
- <title>Define JSF Implementation</title>
+ <title>JSF Capabilities Adding</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_5.png"/>
+ <imagedata fileref="images/first_seam/first_seam7.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>We will also use a default Hibernate Dialect -
- <emphasis>org.hibernate.dialect.HSQLDialect</emphasis> and deploy as a
- <emphasis>war</emphasis> archive.</para>
-
- <para>The project setup wizard also asks you to configure how Seam generates
code for the
- project. The Seam Home Folder should point to a valid Seam distribution. By
default, it is set
- to the Seam distribution bundled in your JBoss Developer Studio tool. If you need
another one
- choose setting up the appropriate check box:</para>
-
+
+ <para>Next wizard step needs more settings that previous. Let's start with
<property>General</property> section.</para>
+ <para>Leave the default Seam runtime and check a WAR deployment.</para>
+
<figure>
- <title>Enter Java Packages for Generated Code</title>
+ <title>Seam Facet Setting</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_6.png"/>
+ <imagedata fileref="images/first_seam/first_seam8.png"/>
</imageobject>
</mediaobject>
</figure>
- <para>If in this list there is no Seam runtime you want to use add it through
<emphasis>
- <property>Window > Preferences > JBoss Tools > Web
>
- Seam</property>
- </emphasis> or just click <emphasis>
- <property>Add</property>
- </emphasis> button near the Seam Runtime list:</para>
+
+ <para>Next <property>Database</property> section is a little
tricky. The <property>Connection Profile</property> needs to be edited so that
the
+ new project works properly with the external HSQLDB server. By default the project
wizard tries to use the JBoss embedded
+ HSQLDB, but the tutorial uses an external database to replicate a more real world
development scenario.
+ Click on <property>Edit</property> to modify the Connection
Profile.</para>
+
<figure>
- <title>Add New Seam Runtime</title>
+ <title>DataBase Setting</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_7.png"/>
+ <imagedata fileref="images/first_seam/first_seam8_1.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>For the deployment format, choose WAR deployment if you want to use POJOs
for UI event
- handling and business logic; choose EAR deployment if you want to EJB3 beans for
added
- features. In most web applications, the WAR deployment option would suffice. You
should also
- enter Java packages for the entity beans (for database mapping) and session beans
(for action
- handlers). All generated code will be placed in those packages. </para>
-
- <para>Click on <emphasis>
- <property>Finish</property>
- </emphasis> to generate a project. The generated project contains all the
necessary library
- JARs, XML configuration files, the ANT build script, as well as simple XHTML web
pages and
- Java classes for the skeleton web application. The project will be shown in Project
Explorer
- as well as in <emphasis>
- <property>Seam Components</property>
- </emphasis> view. If Seam Components view is not open select
<emphasis>
- <property>Window > Show View > Seam
Components</property>
- </emphasis>.</para>
+
+ <para>Select <property>JDBC Connection Properties</property>. Make
sure the URL is set to
<emphasis><property>jdbc:hsqldb:hsql://localhost:1701</property></emphasis></para>
+
<figure>
- <title>Seam Components View</title>
+ <title>JDBC Connection Properties</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_8.png"/>
+ <imagedata fileref="images/first_seam/first_seam9.png"/>
</imageobject>
</mediaobject>
</figure>
- <para>You can hide unused Seam components from this view.</para>
- <itemizedlist>
- <listitem>
- <para>Click the button <emphasis>
- <property>Menu</property>
- </emphasis> on the top of the view (down-pointing arrow)</para>
- </listitem>
- <listitem>
- <para>Choose <emphasis>
- <property>Customize View..</property>
- </emphasis></para>
- </listitem>
- <listitem>
- <para>In the dialog <emphasis>
- <property>Available Customization</property>
- </emphasis> check the filter you want to apply under the
<emphasis>
- <property>Filters</property>
- </emphasis> tab</para>
- </listitem>
- </itemizedlist>
+
+ <para>Try click on <property>Test Connection</property> button. It
probably won’t work. This happens if the hsql jdbc driver is not exactly the same. This
can
+ be worked around by modifying the HSQLDB database driver settings. To modify the
settings, click the <property>“...”</property> next to the drop-down
box.</para>
+
+ <para>The proper Driver JAR File should be listed under <property>Driver
File(s)</property>. Select the hsqldb.jar file found in the
+ database/lib directory and click on
<property>Ok</property>.</para>
+
<figure>
- <title>Seam Components Filtering</title>
+ <title>Driver Details</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_9.png"/>
+ <imagedata fileref="images/first_seam/first_seam10.png"/>
</imageobject>
</mediaobject>
</figure>
- </section>
-
- <section>
- <title>Build and Deploy the Seam Application</title>
- <para>Here, we will show you how to deploy our web project to the server and
then view the application as a web site from a URL.</para>
- <para>Once the application is generated, you can use the "Run on
server" menu
- to build and deploy it into the JBoss AS runtime associated with the project. All
you need is
- to start JBoss AS in the server manager, and load the browser at URL
-
http://localhost:8080/MySeamProj/. You should see the following web
page.</para>
-
+ <para>Select <property>Hypersonic DB</property> and click on
<property>Ok</property>. Again, this only happens if the selected hsqldb.jar
is different
+ from the running database.</para>
+
<figure>
- <title>The Generated Application in Action</title>
+ <title>Hypersonic DB Selecting</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_10.png" />
+ <imagedata fileref="images/first_seam/first_seam11.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>To make simple changes to the page, you just need to double click on the
<emphasis>
- <property>WebContent/home.xhtml file</property>
- </emphasis> and edit it in the visual editor. Notice that the visual editor
lets you both the
- XHTML code and the rendered page. The rendered view is designed to make it easy to
find stuff
- in a complex XHTML page. If you'd like to learn more about the VPE, read the
Editors section in the <ulink
url="../../jsf/html_single/index.html">Visual Web Tools Reference
guide</ulink>.</para>
-
+
+ <para>Now, the <property>Test Connection</property> should succeed.
After testing the connection, click on Ok.</para>
+
<figure>
- <title>Making Changes in the Visual Editor</title>
+ <title>Connection Testing</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_11.png"/>
+ <imagedata fileref="images/first_seam/first_seam12.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>Once you finished editing, save the file (<emphasis>
- <property>File > Save</property>
- </emphasis>), and reload the browser to see the changes.</para>
-
+
+ <para>You can leave the <property>Code Generation</property> section
as is. It refers to Java packages in which the generated code will be
placed.</para>
+
<figure>
- <title>The Front Page is Changed</title>
+ <title>Code Generation Setting</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_12.png"/>
+ <imagedata fileref="images/first_seam/first_seam13.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>Notice that we do not need to re-build and re-deploy the application.
Just save the edited
- page and reload the browser.</para>
-
- </section>
-
- <section>
- <title>Add a Web Page and an Action</title>
-
- <para>Here, we are going to add a new page and related UI action to the
project.</para>
- <para>To do this use the <emphasis>
- <property>New > Other ... > Seam > Seam
Form</property>
- </emphasis> wizard. You are prompted to enter the name of the project and
seam component name,
- all the others fields will be filled by the wizard.</para>
-
+
+ <para>Click on <property>Finish</property> button. Now, there
should be a new Seam project called “workshop” listed in Package Explorer
view.</para>
+
<figure>
- <title>New Form for the Application</title>
+ <title>"worskhop" Project in the Package
Explorer</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_13.png"/>
+ <imagedata fileref="images/first_seam/first_seam14.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>The wizard generate a web page with a single text input field and an
action button. Notice
- that the generated page uses <emphasis>
- <property>layout/template.xhtml</property>
- </emphasis> as a template. The template page provides the page header,
footer, side menu, and
- CSS styles (see the template.xhtml for more details). The simpleAction.xhtml is
assembled into
- the template when the simpleAction.seam URL is loaded.</para>
-
- <programlisting role="XML"><![CDATA[
-<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
- <ui:composition>
xmlns:s="http://jboss.com/products/seam/taglib"
-
xmlns:ui="http://java.sun.com/jsf/facelets"
-
xmlns:f="http://java.sun.com/jsf/core"
-
xmlns:h="http://java.sun.com/jsf/html"
- template="layout/template.xhtml">
-
-<ui:define name="body">
-
- <h:messages globalOnly="true" styleClass="message"/>
-
- <h:form id="simpleActionForm">
- <rich:panel>
- <f:facet name="header">simpleAction</f:facet>
- <s:decorate id="valueDecoration"
template="layout/edit.xhtml">
- <ui:define name="label">Value</ui:define>
- <h:inputText id="value" required="true"
- value="#{simpleAction.value}"/>
- </s:decorate>
- <div style="clear:both"/>
- </rich:panel>
+ </section>
+
+ <section id="start_JBossAS">
+ <title>Start JBoss Application Server</title>
+
+ <para>The complete information on how to manage JBoss AS from JBoss Developer
Studio you can read in a <link linkend="manage">corresponding
chapter</link>.</para>
+ <para>Now you just need to start the server by clicking on green
circle/triangle icon in the JBoss Server View.</para>
- <div class="actionButtons">
- <h:commandButton id="simpleAction" value="simpleAction"
- action="#{simpleAction.simpleAction}"/>
- </div>
- </h:form>
-</ui:define>
-
-</ui:composition>
-]]></programlisting>
<figure>
- <title>Generated Form</title>
+ <title>Starting the Server</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_14.png"/>
+ <imagedata fileref="images/first_seam/first_seam15.png"/>
</imageobject>
</mediaobject>
</figure>
- <para>The <emphasis>
- <property>#{simpleAction.value}</property>
- </emphasis> notation on the web page maps to the "value"
property in the
- backend component named "simpleAction", and the <emphasis>
- <property>#{simpleAction.simpleAction}</property>
- </emphasis> notation indicates that the <emphasis>
- <property>simpleAction()</property>
- </emphasis> method is called when the button is clicked on. Here is the
- "simpleAction" named backend Seam component generated by the
wizard.</para>
-
- <programlisting role="JAVA"><![CDATA[package
org.domain.MySeamProj.session;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.core.FacesMessages;
-import org.hibernate.validator.Length;
+ <para>Then run the project by selecting the project and use
<emphasis><property>Run As... > Run on
Server</property>.</emphasis></para>
-@Name("simpleAction")
-public class SimpleAction {
-
- @Logger private Log log;
-
- @In
- FacesMessages facesMessages;
-
- private String value;
-
- //seam-gen method
- public void simpleAction()
- {
- //implement your business logic here
- log.info("simpleAction.simpleAction()
- action called with: #{simpleAction.value}");
- facesMessages.add("simpleAction #{simpleAction.value}");
- }
-
- //add additional action methods
-
- @Length(max=10)
- public String getValue()
- {
- return value;
- }
-
- public void setValue(String value)
- {
- this.value = value;
- }
-
-}
-]]></programlisting>
-
- <para>Load the Simplepage.seam in the web browser. Type something in the text
field and click on
- the "simpleAction" button. A JSF message containing the input
string is
- created by the <emphasis>
- <property>simpleAction.simpleAction()</property>
- </emphasis> method. The message is displayed on the page via the <emphasis
role="bold">
- <property><h:message></property>
- </emphasis> tag.</para>
-
- </section>
-
- <section>
- <title>Input Validation</title>
- <para>In this section we'll focus on the support of input
validations.</para>
- <para>Notice that in the generated SimpleAction class, there is a
<emphasis>
- <property>@Length</property>
- </emphasis> annotation to validate the input when the input string is bound
to <emphasis>
- <property>#{simpleAction.value}</property>
- </emphasis>. To see how this works, enter a text string longer than 10 chars
and click on the
- button. This is what you should see.</para>
-
+ <note>
+ <title>Note:</title>
+ <para>If the project does not show up, then you can use a normal browser
and use
<emphasis><property>http://localhost:8080/workshop/home.seam</property></emphasis>
as the
+ url.</para>
+ </note>
+
+ <para>Your project looks like this:</para>
+
<figure>
- <title>The Input Validation in Action</title>
+ <title>"workshop" Project Started</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_15.png"/>
+ <imagedata fileref="images/first_seam/first_seam16.png"/>
</imageobject>
</mediaobject>
</figure>
-
- <para>Seam supports many different input validation annotations. To see an
example, you can
- replace the <emphasis>
- <property>@Length(max=10)</property>
- </emphasis> annotation with the following. It would require the input string
to have a first
- name and last name separated by a space. If the validation fails, the web page
would print the
- customized error message.</para>
-
- <programlisting role="JAVA"><![CDATA[@NotNull
-(a)Pattern(regex="^[a-zA-Z.-]+ [a-zA-Z.-]+",
- message="Need a firstname and a lastname")
-public String getValue()
-{
- return value;
-}
-]]></programlisting>
-
- <para>Save the Java file, deploy the application, and reload the browser to see
the new
- validation scheme in action.</para>
-
+
+ </section>
+
+ <section id="workshop_code_overview">
+ <title>Workshop Project Code Overview</title>
+
+ <para>Now let's examine the project and its structure. Go back to the
Package Explorer view in JBoss Developer Studio.</para>
+
+ <para>It seems like it's not much for project but this shell application
contains a login screen with default login logic, a
+ menu template that can be further modified, and other layout
templates.</para>
+
<figure>
- <title>More Input Validation</title>
+ <title>Project Structure</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_16.png"/>
+ <imagedata fileref="images/first_seam/first_seam17.png"/>
</imageobject>
</mediaobject>
</figure>
-
- </section>
-
- <section>
- <title>Add a new UI Component</title>
-
- <para>This section tells you about how you can add a new UI
Component.</para>
- <para>Now, let's add a little more logic to the application. We will
add a new boolean
- property to the action component. If it is set to true, the action would capitalize
the input
- string and display it on the web page. The following code in the SimpleAction class
implements
- the logic.</para>
-
- <programlisting
role="JAVA"><![CDATA[@Name("simpleAction")
-public class SimpleAction {
-
- private boolean convertToCap;
- public boolean getConvertToCap () { return convertToCap; }
- public void setConvertToCap (boolean b) { convertToCap = b; }
+ <para>It’s important to note that the business logic will reside in the
<emphasis><property>src/action</property></emphasis> folder, by
default. And, the
+ package naming conventions that were used in Seam project setup wizard could have
been changed to
+ something different from
<emphasis><property>org.domain.workshop.session</property></emphasis>.
Also, notice that there is a default <property>Authenticator.
+ java</property> file. This is where custom security logic can be added.
Seam has a nice declarative security
+ model that we will explore in a bit more detail later on. The
<emphasis><property>src/model</property></emphasis> folder will
store the project’s
+ JPA entity beans. The view tier of the application is also important. Seam uses
facelets and there is a built-in
+ facelets GUI editor that has some nice WYSIWYG and component drag/drop
functionality. Try this out by opening <property>home.xhtml</property> from
+ <property>WebContent</property> folder.</para>
- public String hello()
- {
- if (convertToCap) {
- value = value.toUpperCase ();
- }
- return null;
- }
- ... ...
-}
-]]></programlisting>
-
- <para>Next, on the web page, add the following line to display the value
property on the
- simpleAction component. Notice that code completion is supported for the JSF EL
expression.</para>
-
- <programlisting role="XML"><![CDATA[<p><b>Hello,
#{simpleAction.value}</b></p>
-]]></programlisting>
-
- <para>Finally, on the web page, we add a boolean selection box component. It is
bound to the <emphasis>
- <property>convertToCap</property>
- </emphasis> property on the backend component.</para>
-
- <programlisting role="XML"><![CDATA[<h:selectBooleanCheckbox
title="convertToCap"
- value="#{simpleAction.convertToCap}" />
-Capitalize the input?
-]]></programlisting>
-
- <para>Deploy the application and see it in action now.</para>
-
<figure>
- <title>Add UI Components and Business Logic</title>
+ <title>Facelets GUI Editor</title>
<mediaobject>
<imageobject>
- <imagedata fileref="images/first_seam/first_seam_17.png"/>
+ <imagedata fileref="images/first_seam/first_seam18.png"
scale="85"/>
</imageobject>
</mediaobject>
</figure>
+
+ <para>Notice that the templates reside in the
<emphasis><property>WebContent/layout</property></emphasis>
folder. There is a stylesheet in
+ the
<emphasis><property>WebContent/stylesheet</property></emphasis>
folder. There is also a login and default error page. The Facelet editor will be explored
in
+ more detail later in the lab.</para>
+
+ <para>The project already has a datasource that was created per the Seam
project wizard database settings. And,
+ obviously all of the Seam specific configuration files and JAR dependencies are
included and placed in
+ the proper locations. On last noteworthy line item is related to the build script.
There isn’t a build script
+ because the Eclipse WTP(Web Tools Project) plugin is used to publish web
application changes. As you
+ can see, JBoss Developer Studio is removing a great deal of complexity from the
enterprise Java project
+ setup/deployment process. The end result is a developer that is writing code, not
spending days/weeks trying
+ to figure out how to get a decent development environment and project build
process.</para>
+
+ </section>
- </section>
+</section>
- <section id="AddSecurity">
- <title>Add Security to the Application</title>
- <para>As the last point, we can add an access control to the
application.</para>
- <para>You have probably noticed that the web page template has a login link at
the top of the
- page. You can use the Seam security framework to secure access to any web page or
web action.
- We just use hardcoded username and password but you can easily change it to use
database, LDAP
- or any other means. The simplest use case for Seam security is to add a declarative
security
- in <property>pages.xml</property> (<emphasis>
- <property>WebContent > WEB-INF > pages.xml</property>
- </emphasis>) like this:</para>
+ <section id="seam_action_dev">
+ <title>Seam Action Development</title>
+
+ <para>Now, it’s time to write some code. The good news is that JBoss Developer
Studio can also help out in
+ this respect. In this section, we will create a new Seam Action POJO and facelet
with some custom business
+ logic and some GUI changes.</para>
+
+ <section id="create_seam_action">
+ <title>Create a New Seam Action</title>
+
+ <para>Go to main menu bar and click on <emphasis><property>File
> New > New Seam Action</property></emphasis> to start the New Seam
Action wizard.</para>
+
+ <para>Specify a <property>Seam component name</property> (e.g.,
"myAction"). The other properties will be auto-completed for
+ you so there is no need to change them. Click on
<property>Finish</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam19.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Now, open the <property>MyAction.java</property> file and
replace the "myAction" method with this logic:</para>
+
+ <programlisting><![CDATA[public void myAction() {
+Calendar cal = Calendar.getInstance();
+log.info("myAction.myAction() action called");
+facesMessages.add("MyAction Executed on:" + cal.getTime());
+}]]></programlisting>
+
+ <para>You also need to import the
<property>java.util.Calendar</property> class by clicking
<emphasis><property>CTRL + Shift +
O</property>.</emphasis></para>
+
+ </section>
+
+ <section id="test_seam_action">
+ <title>Test Seam Action</title>
+
+ <para>The new action can be tested by browsing the workshop-test project.
JBoss Developer Studio has already
+ created a TestNG test case for you.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam20.png"
scale="85"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The test case simulates a Seam component/method execution for the
<property>MyAction.myAction()</property> logic.</para>
+ <para>To run the test case, right click on
<property>MyActionTest.xml</property> and click
<emphasis><property>Run As > TestNG Suite</property></emphasis>
or use the <property>Run
+ As...</property> toolbar shortcut as shown below.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam21.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>With any luck, the test case will pass. Look at the TestNG
view.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam22.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Now, it’s safe to test the new Seam Action in a web browser. The
fastest way to do that is to right click on
<property>myAction.xhtml</property> and use
<emphasis><property>Run As... > Run On
Server</property></emphasis> which will
+ show the appropriate url in the browser. Alternatively you can manually enter
<emphasis><property>http://localhost/workshop/myAction.seam</property></emphasis>
into a browser.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam23.png"
scale="80"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+ <section id="modify_seam_action">
+ <title>Modify Seam Action User Interface</title>
+
+ <para>Browse to
<emphasis><property>http://localhost:8080/workshop/myAction.seam</property></emphasis>
and click on <property>myAction</property>. This executes the
+ “myAction” method. This looks pretty good, but we could make this page look a
little better.</para>
+
+ <para>Open
<emphasis><property>WebContent/myAction.xhtml</property></emphasis>
in JBoss Developer Studio to use the nice facelets editor.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam24.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Right click on the "myAction!" button in the visual
part of editor and select <property><h:commandButton>
Attributes</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam25.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Change the <property>value</property> of the button to
something different. If desired, you can change any other text on the
+ page. Then, type <emphasis><property>CTRL +
S</property></emphasis> to save the facelet.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam26.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Refresh
<emphasis><property>http://localhost:8080/workshop/myAction.seam</property></emphasis>
and now you should see your changes.</para>
+
+ <para>Notice that you did not have to publish the application. JBoss
Developer Studio auto-published it for you.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam27.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+
+ </section>
+
+ <section id="declarative_security">
+ <title>Declarative Security</title>
+
+ <section id="edit_login">
+ <title>Edit Login Authentication Logic</title>
+
+ <para>It’s easy to secure facelets and facelet components in Seam. Let’s go
ahead and secure the action button,
+ then we will secure the entire page.</para>
+
+ <para>There is a class called
<property>Authenticator.java</property>. The login page will execute
+ the <property>Authenticator.authenticate()</property> method by
default, so we’ll start by adding some custom login logic.</para>
+ <para>Open <property>Authenticator.java</property> in JBoss
Developer Studio and replace the <property>authenticate()</property> method
with this code:</para>
+
+ <programlisting><![CDATA[public boolean authenticate() {
+if (identity.getUsername().equals("admin")
+&& identity.getPassword().equals("password")) {
+identity.addRole("admin");
+return true;
+}
+else
+return true;
+}]]></programlisting>
+
+ </section>
+ <section id="secure_seam_page">
+ <title>Secure Seam Page Component</title>
+
+ <para>Open <property>myAction.xhtml</property> and add a new
secured command button:</para>
+ <programlisting><![CDATA[<h:commandButton
id="myActionSecured"
+value="Secured Action Button"
+action="#{myAction.myAction}"
+rendered="#{s:hasRole('admin')}"/>]]></programlisting>
+
+ <para>Refresh
<emphasis><property>http://localhost:8080/workshop/myAction.seam</property></emphasis>
If you are not logged in you will only see one
+ button. If you are logged in, there will be two buttons.</para>
+
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam28.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The secured button is not visible because the user isn’t logged in as
<property>"admin"</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam29.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The user is logged in as
<property>"admin"</property>. Securing components is easy
but securing pages is pretty simple as
+ well. </para>
+ <para>Open
<emphasis><property>WebContent/WEB-INF/pages.xml</property></emphasis>.
Then add this markup directly underneath the
+ <pages> element:</para>
+
+ <programlisting><![CDATA[<page view-id="/myAction.xhtml"
login-required="true"/>]]></programlisting>
+
+ <para>Refresh
<emphasis><property>http://localhost:8080/workshop/myAction.seam</property></emphasis>
If you are not logged in you will get bounced
+ back to the login page.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam30.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Thus, if you enter login credentials for the
<property>"admin"</property> user, you will be re-directed
to the secured page and
+ secured component. If you enter different login credentials, page access will be
granted, but the secured component will not be
+ displayed.</para>
+
+ <para>Congratulations! You have secured your new action both at the facelet
component and page level. You
+ also added custom authentication logic to the login action.</para>
+
+ </section>
+
+ </section>
+
+ <section id="browsing_workshop_db">
+ <title>Browsing Workshop Database</title>
+
+ <section id="database_connectivity">
+ <title>Database Connectivity Setup</title>
+
+ <para>Now, it’s time to use the workshop database that was started at the
beginning of the lab. The workshop
+ data can be browsed inside of JBoss Developer Studio.</para>
- <programlisting role="XML"><![CDATA[<!DOCTYPE pages PUBLIC
- "-//JBoss/Seam Pages Configuration DTD 1.2//EN"
- "http://jboss.com/products/seam/pages-1.2.dtd">
-
-<pages no-conversation-view-id="/home.xhtml"
- login-view-id="/login.xhtml">
-...
-
- <page view-id="/simpleAction.xhtml" login-required="true"/>
+ <para>To open the Data Source Explorer, click on
<emphasis><property>Window > Open Perspective > Other > Database
Development</property>.</emphasis></para>
+ <para>In the Data Source Explorer, expand a
<property>Databases</property> node and select a
<property>Default</property> database.
+ Right click on it, select <property>Connect</property> from the
context menu.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam31.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </section>
-</pages>]]></programlisting>
-
-
- <para>Re-deploy the application and try the action button. The application
redirects to the <emphasis>
- <property>login</property>
- </emphasis> page asking for login credentials. The method is invoked after
you successfully
- logged in.</para>
-
- <figure>
- <title>Access Control for Action Methods</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/first_seam/first_seam_18.png"/>
- </imageobject>
- </mediaobject>
- </figure>
-
+ <section id="browsing_workshop_db2">
+ <title>Browse Workshop Database</title>
+
+ <para>Then in the current view, drill down to the
<property>CUSTOMERS</property> table.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam32.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Right click on <property>CUSTOMERS</property>, select
<emphasis><property>Data > Sample
Contents</property></emphasis> to view the data in the table.</para>
+
+ <para>There should be a SQL Results view on the workbench, but it could be
hidden.
+ Click on the <property>"Result1"</property> tab in
the right side and you should see the data in the CUSTOMERS table.</para>
+
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam33.png"
scale="85"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <note>
+ <title>Note:</title>
+ <para>If you can’t find the SQL Results view tab, click on
<emphasis><property>Window > Show View > Other > SQL Development >
SQL Results</property>.</emphasis></para>
+ </note>
+
+ <para>Congratulations! You just connected to the workshop database and
queried the content using Database Explorer tools.</para>
+
+ </section>
+
</section>
+ <section id="db_programming">
+ <title>Database Programming</title>
+
+ <section id="reverse_engineer_crud">
+ <title>Reverse Engineer CRUD from a Running Database</title>
+
+ <para>Now, it’s time to reverse engineer the workshop database into a fully
functioning Seam CRUD(Create
+ Read Update Delete) application.</para>
+
+ <para>In JBoss Developer Studio, switch to Seam perspective and click on
<emphasis><property>File > New > Seam Generate
Entities</property>.</emphasis></para>
+
+ <para>In the Seam Generate Entities wizard, select
"workshop" project using the <property>Browse</property>
button. There is no need to change something more, click on
<property>Finish</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam34.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>After running the Generate Entities action, you will see new
<emphasis><property>org.domain.workshop.entity</property></emphasis>
classes.
+ These classes represent insert/update/delete/query logic.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam35.png"
scale="85"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>There are also
<emphasis><property>org.domain.workshop.entity</property></emphasis>
package that contains the JPA classes. These are the entity
+ beans that are mapped to database tables.</para>
+
+ <para>Last, but not least, there are facelets for all of the CRUD screens.
The best way to get a feel for the generated
+ code is to open a browser and play around with the application. Go to
<emphasis><property>http://localhost:8080/workshop</property></emphasis>
+ and insert/update/delete/query a few records. There is quite a bit of AJAX in
this application, but
+ which we will explore further later on in the lab. For now, take note of the page
tabs, required field logic
+ and data table sorting in the list pages. </para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam36.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Congratulations! You now have a fully functioning CRUD application
+ that is already AJAX enabled.</para>
+
+ </section>
+
+ <section id="use_hibernate_tools">
+ <title>Use Hibernate Tools to Query Data via JPA</title>
+
+ <para>Now, it’s time to write some JPA queries using the Hibernate Tools
perspective in JBoss Developer Studio.</para>
+ <para>In the upper right corner of the workbench there is a small
<property>>></property>, click on it and choose
<property>Hibernate</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam37.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Look at the Hibernate Configurations view. In the
"workshop" project, drill down on the
+ <property>Session Factory</property> and notice that the JPA
entities/attributes are listed in a nice tree view.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam38.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Right click on the <property>Session Factory</property> and
select <property>HQL Editor</property>. This will open a JPA query scratch
pad
+ window.</para>
+
+ <para>Write your query and click on the "Hibernate Dynamic SQL
Preview" tab. You should see the SQL that will be executed if this JPA query is
run.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam39.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Run the query by clicking on the green run icon.</para>
+
+ <para>The results are listed in the "Hiberanate Query
Result" tab. There is a "Properties" tab in the workbench
+ that can be used to see a specific JPA result. These results represent the JPA
objects because our
+ query did not specify column names.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam40.png"
scale="80"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The query can be refined, and take note that there is nice code
completion in the JPA query editor.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam41.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>A refined query will return results that are more ResultSet oriented.
Notice the join logic that JPA supports.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam42.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>There was no need to specify an
<property>Employees</property> table in the
<property>from</property> part of the JPA query because JPA supports
+ reference traversal via Java class attribute references. Not only are JPA and HQL
queries fully supported,
+ but Criteria based queries can also be written in the Criteria Editor. You should
spend some time
+ tinkering with different queries and possibly Criteria based queries, even though
the instructions are not
+ provided in this lab.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam43.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+
+
+ </section>
+
+ <section id="use_hibernate_to_vizualize">
+ <title>Use Hibernate Tools to visualize the Data Model</title>
+
+ <para>Now, it’s time to view the data model for the workshop
database.</para>
+
+ <para>In the Hibernate Configurations view, select
"workshop" project and expand the
<property>Configuration</property> node.
+ Select the <property>Customers</property> entity, right click on it,
choose <property>Open Mapping Diagram</property>.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam44.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+
+ <para>You see a Diagram tab for the CUSTOMERS table and any tables that have
FK references. This is a
+ handy way to view the data model and JPA mappings. Now, you’ve got access to
something that the Erwin
+ Data Modeler can’t do.</para>
+
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam45.png"
scale="80"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+ </section>
- <section id="OtherRelevantResourcesOnTheTopic2">
- <?dbhtml filename="OtherRelevantResourcesOnTheTopic2.html"?>
- <title>Other relevant resources on the topic</title>
- <para>Seam on JBoss: <ulink
url="http://www.jboss.com/products/seam">Seam
Framework</ulink></para>
-
- <para>Ten Good Reasons to use Seam: <ulink
url="http://www.jboss.com/products/seam/whyseam">Why
- Seam</ulink></para>
- <para>Getting Started: <ulink
url="http://labs.jboss.com/jbossseam/gettingstarted">Getting
- Started with JBoss Seam</ulink></para>
- <para>Wiki: <ulink
url="http://www.jboss.com/wiki/Wiki.jsp?page=JBossSeam">JBoss
Wiki</ulink></para>
- <para>FAQ: <ulink
url="http://labs.jboss.com/jbossseam/faq/index.html">JBoss Seam
FAQ</ulink></para>
- <para>Downloads: <ulink
url="http://labs.jboss.com/jbossseam/download">JBoss Seam
- Downloads</ulink></para>
- <para>Jira: <ulink
url="http://jira.jboss.org/jira/browse/JBSEAM">Jira issue
tracker</ulink></para>
- <para>Rules Framework: <ulink
url="http://www.jboss.com/products/rules">JBoss
Rules</ulink></para>
- <para>Seam Tools - New and Noteworthy: <ulink
-
url="http://fisheye.jboss.org/browse/~raw,r=3993/JBossTools/trunk/do...
- >What's new and noteworthy</ulink></para>
- <para>Max Andersen's blogs: <ulink
url="http://blog.xam.dk/">Max's blog</ulink>, <ulink
url="http://in.relation.to/Bloggers/Max">In Relation
To...</ulink></para>
-
- </section>
+
+ <section id="rich_components">
+ <title>Rich Components</title>
+
+ <section id="add_richfaces">
+ <title>Add a Richfaces component to the CRUD Application</title>
+
+ <para>This lab will conclude with one last AJAX twist. We will add a
RichFaces <property>inputNumberSlider</property> to the Order
+ Details edit screen.</para>
+
+ <para>Switch to Seam perspective, open
<emphasis><property>WebContent/OrderdetailsEdit.xhtml</property></emphasis>
in JBoss Developer Studio.</para>
+ <para>Change the form field values using the visual editor. Seam has
generated the form field names that match the
+ database column names. This is not ideal for business users.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam46.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Also, replace the QTY Ordered input field with a
<property>inputNumberSlider</property>. You can use the JBoss Developer
+ Studio palette or right click on the form and insert the RichFaces
component.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam47.png"
scale="85"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>One the last option is to use the source view and manually copy the
inputNumberSlider markup listed below:</para>
+
+ <programlisting><![CDATA[<rich:inputNumberSlider
id="quantityOrdered" required="true"
+
value="#{orderdetailsHome.instance.quantityordered}"/>]]></programlisting>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam48.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The end result is an edit page that has better form labels and a new
RichFaces control.</para>
+
+ <figure>
+ <title></title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/first_seam/first_seam49.png"
scale="85"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Congratulations! You have completed the JBoss Developer Studio
lab.</para>
+
+ </section>
+
+ </section>
+
</chapter>