Now I don't understand it too - a classic case of 'I don't see the forest cause 
of all the trees'. Thanks for your clarification & patience!

EDIT: i just saw normans post while editing mine - so i post my solution, feel 
free to integrate / modify it:

The filterclass:
public class UrlRewriteFilter implements Filter {
  | 
  |     private FilterConfig filterConfig;
  |     private String[] variableNames;
  |     private String[] delimiters;
  |     private String targetUrl;
  | 
  |     public void init(FilterConfig filterConfig) throws ServletException {   
        
  |             this.filterConfig = filterConfig;
  |             this.targetUrl = filterConfig.getInitParameter("target");
  |             String pattern = "#\\{[^}]+}";
  |             String configString = filterConfig.getInitParameter("pattern");
  |             Pattern p = Pattern.compile(pattern);
  |             Matcher m = p.matcher(configString);
  | 
  |             List<String> variableNames = new ArrayList<String>();
  |             while(m.find()) {
  |                     variableNames.add(configString.substring(m.start()+2, 
m.end()-1));
  |             }
  |             this.variableNames = variableNames.toArray(new 
String[variableNames.size()]);
  |             this.delimiters = configString.split(pattern);
  |     }
  | 
  |     public void doFilter(ServletRequest servletRequest, ServletResponse 
servletResponse, FilterChain filterChain) throws IOException, ServletException {
  |             HttpServletRequest httpRequest = (HttpServletRequest) 
servletRequest;
  |             String request = httpRequest.getRequestURI();
  |             
  |             int start;
  |             int end = request.indexOf(delimiters[0]);
  |             for(int i=0; i<variableNames.length; i++) {
  | 
  |                     start = end + delimiters[ i ].length();
  |                     end = request.indexOf(delimiters[i+1], start);
  |                     servletRequest.setAttribute(variableNames, 
request.substring(start, end));
  |             }
  |             
filterConfig.getServletContext().getRequestDispatcher(targetUrl).forward(servletRequest,
 servletResponse);
  |     }
  | 
  |     public void destroy() {;
  | 
  | }

The config in web.xml:
<filter>
  |             <filter-name>UrlRewriteFilter</filter-name>
  |             <filter-class>com.example.UrlRewriteFilter</filter-class>
  |             <init-param>
  |                     <param-name>pattern</param-name>
  |                     
<param-value>/products/#{categoryId}/#{productId}.xhtml</param-value>
  |             </init-param>
  |             <init-param>
  |                     <param-name>target</param-name>
  |                     <param-value>/showProduct.xhtml</param-value>
  |             </init-param>
  |     </filter>
  |     
  |     <filter-mapping>
  |             <filter-name>UrlRewriteFilter</filter-name>
  |             <url-pattern>/products/*</url-pattern>
  |     </filter-mapping>

The bean that loads the product is the one above and the jsf is trivial.

With a configuration like this a URL like 
http://www.example.com/products/cars/123.xhtml is mapped to 
http://www.example.com/showProducts.xhtml?categoryId=cars&productId=123 Note 
that the request variables are attributes not parameteres therefore 
@RequestParameter doesn't work.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3988547#3988547

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3988547
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to