Sometimes a definition, before it is rendered, needs to be "prepared". For example when showing a menu, the menu structure must be created and stored in the request scope.
For this reason, a View Preparer can be used: it is called before the definition is rendered, so all the things needed to render correctly the definition can be prepared.
A View Preparer is simply a class that implement the ViewPreparer interface. The execute method allows to execute code before a definition is rendered. You can extend the ViewPreparerSupport class to avoid compiling problems in the case the ViewPreparer interface changes.
package my.package;
import org.apache.tiles.preparer.PreparerException;
import org.apache.tiles.preparer.ViewPreparer;
import org.apache.tiles.request.Request;
import org.apache.tiles.AttributeContext;
import org.apache.tiles.Attribute;
public class TestViewPreparer implements ViewPreparer {
public void execute(Request tilesRequest, AttributeContext attributeContext)
throws PreparerException {
attributeContext.putAttribute(
"body",
new Attribute("This is the value added by the ViewPreparer"));
}
}To associate a preparer to a definition, put its complete path name to the preparer attribute of the <definition> element:
<definition name="preparer.definition" preparer="org.apache.tiles.test.preparer.TestViewPreparer"> <put-attribute name="foo" value="/bar/foo.jsp" /> </definition>