You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Apache Wiki <wi...@apache.org> on 2005/05/27 21:50:57 UTC
[Jakarta-tapestry Wiki] Update of "ShortcutUrls" by HenriDupre
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Jakarta-tapestry Wiki" for change notification.
The following page has been changed by HenriDupre:
http://wiki.apache.org/jakarta-tapestry/ShortcutUrls
New page:
This is a code for a Servlet Filter that allows to create shortcuts to Tapestry urls.
It is an alternative to urlrewrite. I wrote this code because I'm coding most parameters using the datasqueezer and my shortcuts needs to do more processing than urlrewrite (also I'm allergic to regular expressions).
{{{
public class ServletFilter implements Filter {
private FilterConfig m_config;
public void init(FilterConfig config) throws ServletException {
m_config = config;
for (UrlPage ipage:UrlPage.values()) {
ipage.register(this);
}
}
private DataSqueezer m_datasqueezer;
public DataSqueezer getDataSqueezer() {
if (m_datasqueezer == null)
m_datasqueezer = new DataSqueezer(null);
return m_datasqueezer;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest hrequest = (HttpServletRequest) request;
final HttpServletResponse hresponse = (HttpServletResponse) response;
String servletPath = hrequest.getServletPath();
String compString = servletPath.toUpperCase();
for (UrlPage ipage:UrlPage.values()) {
String cString = '/' + ipage.getName();
if (compString.startsWith(cString.toUpperCase())) {
ExternalPageInfos infos = ipage.getPageInfos(hrequest);
String newURL = hrequest.getContextPath() + "/exec?service=external/" + infos.pageName;
for (String par:infos.parameters) {
newURL = newURL + "&" + "sp=" + par;
}
hresponse.sendRedirect(newURL);
return;
}
}
chain.doFilter(request, response);
}
public void destroy() {
}
}}}
And here is my enum that contains all the shortcut infos. It creates shortcuts to two Tapestry pages, FicheArticle and Partenaires. The first one is a shortcut article?ref=xxx and calls FicheArticle. It passes the ref and a 0 as integer to the external page. The second is a shortcut partenaire?part=xxx and calls a page "Partenaires". The getSqueezeInfo method creates a hibernate object reference for the datasqueezer that can then be loaded (using the code I posted on the Hibernate/Spring/Tapestry integration).
{{{
import java.io.Serializable;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.Hibernate;
public enum UrlPage {
Article("article") {
public ExternalPageInfos getPageInfos(HttpServletRequest request) throws IOException {
ExternalPageInfos infos = new ExternalPageInfos();
infos.pageName = "FicheArticle";
String idArt = getSqueezeInfo(Article.class, request.getParameter("ref"));
infos.parameters = new String[] { idArt, squeeze(0) };
return infos;
}
},
Partenaires("partenaires") {
public ExternalPageInfos getPageInfos(HttpServletRequest request) {
ExternalPageInfos infos = new ExternalPageInfos();
infos.pageName = "Partenaires";
String id_part = request.getParameter("part");
infos.parameters = new String[] { id_part };
return infos;
}
};
private String m_urlname;
private static ServletFilter s_filter;
private static String squeeze(Object obj) throws IOException {
return s_filter.getDataSqueezer().squeeze(obj);
}
private static String getSqueezeInfo(Class clazz, Object id) throws IOException {
String info = clazz.getName();
info = info.concat(ActualisEngine.HIB_SEPARATOR);
info = info.concat(s_filter.getDataSqueezer().squeeze(id));
return ActualisEngine.HIB_PREFIX + info;
}
UrlPage(String name) {
m_urlname = name;
}
public String getName() {
return m_urlname;
}
public abstract ExternalPageInfos getPageInfos(HttpServletRequest request)
throws IOException;
public void register(ServletFilter filter) {
s_filter = filter;
}
}
}}}
And the last class
{{{
public class ExternalPageInfos {
String pageName;
String[] parameters;
}
}}}
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org