Help

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

The only time you will have links in your HTML with automatically appended conversation identifiers is when you use <s:link> or <s:button>. (Anything that follows is equivalent for both of these widgets.) When clicked, a GET request is made by the browser or any search robot that indexes your site and crawls the links.

It turns out that there are actually very few usecases for <s:link> and some of its features might very much conflict with robots.

For example, calling an action with a GET request (look at the URL when you specify an action attribute) is not idempotent and therefore unsafe (imagine the Googlebot calling your delete() method).

Second, conversation identifiers are always appended on these links even if the conversation is temporary and by definition will not be available when the link is clicked. This is conceptually necessary, because we don't know at the time when <s:link> is rendered if the conversation will stay temporary (some factory of some EL expression might begin a long-running conversation during rendering).

Use <s:link> as rarely as possible on a website that will be crawled by bots.

Only specify safe actions that can be called repeatedly without causing conflicts or modifying resource state on the server (writing to the database...) - and better, do not specify actions at all but only use <s:link> in its simplest variation:

<s:link view="/someOtherView.xhtml" propagation="none">My Link</s:link>

Notice the propagation="none" attribute, which disables the embedding of the conversation identifier in the URI. For a temporary conversation, this means the next GET request will start a new temporary conversation (so absolutely no difference with or without the identifier). If you are in a long-running conversation, however, you just left it and you started a new temporary conversation. You can switch back to the previous conversation using the workspace switcher widget or something similar (see the reference docs).