[seam-commits] Seam SVN: r7236 - branches/Seam_2_0/doc/reference/en/modules.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Fri Jan 25 11:03:36 EST 2008
Author: pete.muir at jboss.org
Date: 2008-01-25 11:03:36 -0500 (Fri, 25 Jan 2008)
New Revision: 7236
Modified:
branches/Seam_2_0/doc/reference/en/modules/conversations.xml
Log:
Backport of r7233 (Remove explicit conversation id docs, merge in blog article to natural conversation docs)
Modified: branches/Seam_2_0/doc/reference/en/modules/conversations.xml
===================================================================
--- branches/Seam_2_0/doc/reference/en/modules/conversations.xml 2008-01-25 15:45:10 UTC (rev 7235)
+++ branches/Seam_2_0/doc/reference/en/modules/conversations.xml 2008-01-25 16:03:36 UTC (rev 7236)
@@ -559,61 +559,71 @@
</section>
<section>
- <title>Using an "explicit" conversation id</title>
- <para>
- Ordinarily, Seam generates a meaningless unique id for each conversation
- in each session. You can customize the id value when you begin the
- conversation.
- </para>
-
- <para>
- This feature can be used to customize the conversation id generation
- algorithm like so:
- </para>
-
- <programlisting><![CDATA[@Begin(id="#{myConversationIdGenerator.nextId}")
-public void editHotel() { ... }]]></programlisting>
-
- <para>
- Or it can be used to assign a meaningful conversation id:
- </para>
-
- <programlisting><![CDATA[@Begin(id="hotel#{hotel.id}")
-public String editHotel() { ... }]]></programlisting>
-
- <programlisting><![CDATA[@Begin(id="hotel#{hotelsDataModel.rowData.id}")
-public String selectHotel() { ... }]]></programlisting>
-
- <programlisting><![CDATA[@Begin(id="entry#{params['blogId']}")
-public String viewBlogEntry() { ... }]]></programlisting>
-
- <programlisting><![CDATA[@BeginTask(id="task#{taskInstance.id}")
-public String approveDocument() { ... }]]></programlisting>
-
- <para>
- Clearly, these example result in the same conversation id every time
- a particular hotel, blog or task is selected. So what happens if a conversation
- with the same conversation id already exists when the new conversation
- begins? Well, Seam detects the existing conversation and redirects
- to that conversation without running the <literal>@Begin</literal>
- method again. This feature helps control the number of workspaces
- that are created when using workspace management.
- </para>
-
- </section>
-
- <section>
<title>Natural conversation ids</title>
<para>
When working with conversations that deal with persistent objects, it may be
desirable to use the natural business key of the object instead of the standard,
- "surrogate" conversation id.
+ "surrogate" conversation id:
</para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <emphasis>Easy redirect to existing conversation</emphasis>
+ </para>
+ <para>
+ It can be useful to redirect to an existing conversation if
+ the user requests the same operation twice. Take this example:
+ </para>
+ <quote>
+ You are on ebay, half way through paying for an item you just
+ won as a Christmas present for your parents. Lets say you're
+ sending it straight to them - you enter your payment details
+ but you can't remember their address. You accidentally reuse
+ the same browser window finding out their address. Now you
+ need to return to the payment for the item.
+ </quote>
+ <para>
+ With a natural conversation its really easy to have the user
+ rejoin the existing conversation, and pick up where they left
+ off - just have them to rejoin the payForItem conversation
+ with the itemId as the conversation id.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>User friendly URLs</emphasis>
+ </para>
+
+ <para>
+ For me this consists of a navigable
+ hierarchy (I can navigate by editing the url) and a meaningful
+ URL (like this Wiki uses - so don't identify things by random
+ ids). For some applications user friendly URLs are less
+ important, of course.
+ </para>
+
+ <para>
+ With a natural conversations, when you are building your hotel
+ booking system (or, of course, whatever your app is) you can
+ generate a URL like
+ <literal>http://seam-hotels/book.seam?hotel=BestWesternAntwerpen</literal>
+ (of course, whatever parameter <literal>hotel</literal> maps
+ to on your domain model must be unique) and with URLRewrite
+ easily transform this to
+ http://seam-hotels/book/BestWesternAntwerpen.
+ </para>
+
+ <para>
+ Much better!
+ </para>
+ </listitem>
+ </itemizedlist>
+
<section>
- <title>Configuration</title>
+ <title>Creating a natural conversation</title>
<para>
- Natural conversations are configured in <literal>pages.xml</literal>:
+ Natural conversations are defined in <literal>pages.xml</literal>:
</para>
<programlisting><![CDATA[ <conversation name="PlaceBid"
@@ -621,7 +631,7 @@
parameter-value="#{auction.auctionId}"/>]]></programlisting>
<para>
- The first thing to note from the above configuration is that the conversation
+ The first thing to note from the above definition is that the conversation
has a name, in this case <literal>PlaceBid</literal>. This name uniquely
identifies this particular named conversation, and is used by the
<literal>page</literal> definition to identify a named conversation to participate
@@ -631,8 +641,7 @@
<para>
The next attribute, <literal>parameter-name</literal> defines the request parameter
that will contain the natural conversation id, in place of the default conversation
- id parameter (which is typically either <literal>cid</literal> or <literal>conversationId</literal>).
- In this example, the <literal>parameter-name</literal> is <literal>auctionId</literal>.
+ id parameter. In this example, the <literal>parameter-name</literal> is <literal>auctionId</literal>.
This means that instead of a conversation parameter like <literal>cid=123</literal>
appearing in the URL for your page, it will contain <literal>auctionId=765432</literal>
instead.
@@ -646,7 +655,7 @@
</para>
<para>
- The next step is to configure which pages will participate in the named conversation.
+ Next, we define which pages will participate in the named conversation.
This is done by specifying the <literal>conversation</literal> attribute for a
<literal>page</literal> definition:
</para>
@@ -669,7 +678,7 @@
<para>
When starting, or redirecting to, a natural conversation there are a number
of options for specifying the natural conversation name. Let's start by looking at
- the following page configuration:
+ the following page definition:
</para>
<programlisting><![CDATA[ <page view-id="/auction.xhtml">
@@ -683,7 +692,7 @@
<para>
From here, we can see that invoking the action <literal>#{bidAction.placeBid}</literal>
from our auction view (by the way, all these examples are taken from the seamBay example in Seam),
- that we will be redirected to <literal>/bid.xhtml</literal>, which as we saw previously
+ that we will be redirected to <literal>/bid.xhtml</literal>, which, as we saw previously,
is configured with the natural conversation <literal>PlaceBid</literal>. The declaration for
our action method looks like this:
</para>
@@ -696,7 +705,7 @@
redirection to the named conversation occurs as part of navigation rules, after the
action method has already been invoked. This is a problem when redirecting to an
existing conversation, as redirection needs to be occur before the action method is
- invoked. To cater for this, it is necessary to specify the conversation name when
+ invoked. Therefore it is necessary to specify the conversation name when
the action is invoked. One way of doing this is by using the <literal>s:conversationName</literal>
tag:
</para>
More information about the seam-commits
mailing list