Link Components
How do I add query parameters to a PageLink or ActionLink?
These components do not have parameters to allow you to specify query parameters for the link; they both allow you to specify a context (one or more values to encode into the request path).
However, you can accomplish the same thing with a little code and markup. For example, to create a link to another page and pass a query parameter, you can replace your PageLink component with a standard <a>
tag:
<a href="${profilePageLink}">Display Profile (w/ full details)</a>
In the matching Java class, you can create the Link programmatically:
@Inject private PageRenderLinkSource linkSource; public Link getProfilePageLink() { Link link = linkSource.createPageRenderLinkWithContext(DisplayProfile.class, user); link.addParameterValue("detail", true); return link; }
... and in the DisplayProfile page:
public class DisplayProfile { void onActivate(@RequestParameter("detail") boolean detail) { . . . } }
The @RequestParameter annotation directs Tapestry to extract the query parameter from the request and coerce it to type boolean. You can use any reasonable type for such a parameter (int, long and Date are common).
A similar technique can be used to add query parmeters to component event URLs (the type generated by the ActionLink or EventLink components), by injecting the ComponentResources, and invoking method createEventLink()
.