Thanks Gavin, now it's working like a charm :)

In case anyone is interested my solution is the following:
package com.example.usecases.web;
  | 
  | import java.io.File;
  | import java.util.HashMap;
  | import java.util.Iterator;
  | 
  | import javax.faces.context.FacesContext;
  | import javax.servlet.ServletContext;
  | 
  | import org.dom4j.Document;
  | import org.dom4j.DocumentException;
  | import org.dom4j.Element;
  | import org.dom4j.io.SAXReader;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.core.Pageflow;
  | import org.jboss.seam.pageflow.Page;
  | 
  | @Name("org.jboss.seam.core.pageflow")
  | public class MyPageflow extends Pageflow {
  | 
  |     private static final long serialVersionUID = -7905951040207871423L;
  |     private static HashMap<String, String> viewMap = null;
  |     
  |     @In(value = "org.jboss.seam.core.facesContext", required = false)
  |     private FacesContext facesContext;
  | 
  |     @Override
  |     protected String getViewId(Page page) {
  |             if(!page.getViewId().startsWith("/") && facesContext != null) {
  |                     if(viewMap == null) {
  |                             viewMap = createViewMap(((ServletContext) 
facesContext.getExternalContext().getContext()).getRealPath(""));
  |                     }
  |                     return viewMap.get(page.getViewId());
  |             }
  |             return super.getViewId(page);
  |     }
  |     
  |     private HashMap<String, String> createViewMap(String realPathPrefix) {
  |             String[] configFiles = {
  |                             "WEB-INF" + File.separator + "faces-config.xml",
  |                             "WEB-INF" + File.separator + "navigation.xml" };
  |             HashMap<String, String> viewMap = new HashMap<String, String>();
  |             for (int i = 0; i < configFiles.length; i++) {
  |                     Document doc = null;
  |                     File file = null;
  |                     try {
  |                             file = new File(realPathPrefix + File.separator 
+ configFiles[ i ]);
  |                             doc = new SAXReader().read(file);
  |                     } catch (DocumentException e) {
  |                             System.out.println("Can't read navigation rules 
from file: " + file.getAbsolutePath());
  |                             continue;
  |                     }
  |                     Element rootElement = doc.getRootElement();
  |                     Iterator rootIterator = 
rootElement.elementIterator("navigation-rule");
  |                     while (rootIterator.hasNext()) {
  |                             Element element = (Element) rootIterator.next();
  |                             if (element.element("from-view-id") == null
  |                                             || 
element.element("from-view-id").getText().equals("*")) {
  |                                     Element navigationCase = 
element.element("navigation-case");
  |                                     
viewMap.put(navigationCase.element("from-outcome").getText(),
  |                                                     
navigationCase.element("to-view-id").getText());
  |                             }
  |                     }
  |             }
  |             return viewMap;
  |     }       
  | }

The only drawback is that the path on the filesystem is read from the 
servletcontext - therefore it doesn't work upon first request.

If someone knows a more elegant solution i would be glad to hear it ;)

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

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

Reply via email to