DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
NOTE: This is outdated information that applies only to Tapestry 4. |
If you (as in my case) want to put some HTML meta tags in your pages AFAIK the easiest solution is to provide a custom delegate to the Shell component which outputs the tags you need.
First you have to define a Shell component in the HTML template (most preferable in the one of a custom Border component):
<span jwcid="$content$"> <html jwcid="shell"> <body jwcid="@Body"> ...
In the page specification (or component specification if you use a custom Border component) you have to add the following to bind the delegate bean to the Shell component:
<bean name="shellDelegate" class="ShellDelegate"/>
<component id="shell" type="Shell">
<binding name="delegate" value="bean:shellDelegate"/>
</component>
An example ShellDelegate bean could look like:
import java.util.Locale;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRender;
import org.apache.tapestry.IRequestCycle;
public class ShellDelegate implements IRender
{
public void render(IMarkupWriter writer, IRequestCycle cycle)
{
addMetaTag(writer, "copyright", "YOUR_COPYRIGHT_NOTICE");
addMetaTag(writer, "author", "YOUR_NAME");
addMetaTag(writer, "robots", "Index,Follow");
Locale locale = cycle.getEngine().getLocale();
if (locale.getLanguage().equals(new Locale("de", "", "").getLanguage()))
{
addMetaTag(writer, "description", "DESCRIPTION");
addMetaTag(writer, "keywords", "KEYWORDS" );
}
}
private void addMetaTag(IMarkupWriter writer, String key, String value)
{
writer.beginEmpty("meta");
writer.attribute("name", key);
writer.attribute("content", value);
writer.print("\n");
}
}
There's another solution that does NOT require the creation of a custom delegate class.
<span jwcid="$content$"> <html jwcid="shell"> <head jwcid="remainingHead@Block"> <meta name="copyright" content="YOUR_COPYRIGHT_NOTICE"/> <meta name="author" content="YOUR_NAME"/> <meta name="robots" content="Index,Follow"/> ... <link rel="SHORTCUT ICON" href="favicon.ico" /> </head> <body jwcid="@Body"> ...
and then in the page specification:
<component id="shell" type="Shell">
<binding name="delegate"
value="new org.apache.tapestry.components.BlockRenderer(components.remainingHead)"/>
</component>
Or just do this:
<html jwcid="@Shell" title="ognl:title" stylesheet="asset:stylesheet" delegate="component:meta">
<span jwcid="@If" condition="false">
<span jwcid="meta@If" condition="true">
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="Mon, 06 Jan 1990 00:00:01 GMT" />
</span>
</span>
....