2010-10-04 6 views
0

J'ai besoin de votre aide! J'ai une application jsf, qui a maintenant 2 versions - une pour les navigateurs mobiles et une pour les navigateurs de bureau. Les pages pour le bureau se trouvent dans le dossier/html, et pour mobile -/html/mobile. Je veux un résultat décider quelles pages exactement montrer - de/html ou de/html/mobile.
Je crée l'attribut de session isMobileBrowser - qui indique quel navigateur j'ai.jsf navigation d'un résultat à diff viewId

Boolean isMobileBrowser = (Boolean) session.getAttribute("isMobileBrowser"); 
    if (isMobileBrowser == null) { 
Enumeration e = req.getHeaders("user-agent"); 
while(e.hasMoreElements()) { 
String str = e.nextElement().toString().toLowerCase(); 
if (str.indexOf("mobile") != -1) { 
    isMobileBrowser = new Boolean(true); 
    System.out.println("MOBILE BROWSER"); 
} else { 
    isMobileBrowser = new Boolean(false); 
    System.out.println("STANDARD BROWSER"); 
} 
session.setAttribute("isMobileBrowser", isMobileBrowser); 
} 

}

Et maintenant, je veux quelque chose comme ça:

<navigation-rule> 
    <from-view-id>*</from-view-id> 
    <navigation-case> 
    <from-outcome>clientadmin</from-outcome> 
        // if mobile 
     <to-view-id>/html/mobile/clientadmin.jsf</to-view-id> 
         // if desktop 
         <to-view-id>/html/clientadmin.jsf</to-view-id> 
     </navigation-case> 
    </navigation-rule> 

Comment puis-je faire mieux. Je trouve NavigationHandler, mais ne comprends pas comment cela fonctionne. J'essaie aussi avec des conditions dans xml - mais je ne pense pas qu'elles fonctionnent (j'utilise jsf 2.0).

Toute aide sera importante! Merci!

Répondre

0

Si vous utilisez jsf2.0, vous pouvez utiliser une expression de valeur pour. Voir ch. 2.4.2.1 dans la spécification JSF 2.0. Si vous utilisez Jsf1.2, vous devez implémenter un ViewHandler personnalisé.

Voir how-to-make-jsf-navigation-rules-more-dynamic

Questions connexes