jsf - 在 JSF 中是否有更优雅的基于用户代理切换模板的方法?

标签 jsf browser mobile user-agent

我们有一个用 JSF 编写的 Web 应用程序,并正在尝试为其添加移动版本。理想情况下,我们有一个单独的文件夹,其中包含模板、CRUD 和资源(例如 jQuery Mobile),并且我们的登陆页面将能够根据 header 的用户代理属性选择适当的模板。

一种方法是使用 scriptlet 并重定向到 mobile/index.xhtml - 故事结束,但人们不喜欢 scriptlet :D

另一种方法是将登陆页面的内容(包括模板化部分)包装在带有 render="#{mobileDetector.isMobile()}"的 panelGroup 中,让支持 bean 执行 scriptlet 本来会执行的操作。但我认为这会削弱模板,而且它不适用于头部部分。

那么 - 有更好的方法吗?

最佳答案

要么使用单独的子域,例如mobile.example.com(适用于移动用户)和 (www.)example.com(适用于桌面用户),和/或嗅探用户代理。公共(public) API 可用:

或者,您可以使用 CSS 来隐藏/更改基于 media type 的 HTML 标记的部分内容。 。

<link rel="stylesheet" href="css/desktop.css" media="screen,projection">
<link rel="stylesheet" href="css/mobile.css" media="handheld">
<link rel="stylesheet" href="css/print.css" media="print">
<link rel="stylesheet" href="css/iphone.css" media="all and (max-device-width: 480px)">
<link rel="stylesheet" href="css/ipad-portrait.css" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait)">
<link rel="stylesheet" href="css/ipad-landscape.css" media="all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)">

关于jsf - 在 JSF 中是否有更优雅的基于用户代理切换模板的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518543/

相关文章:

ajax - 错误页面上的错误报告表

css - 浏览器可以覆盖 css 规范吗?

javascript - wget + JavaScript?

java - 在 Swing 中显示 HTML,我的示例不起作用吗?

javascript - 如何在触发选项更改事件时自动关闭移动选择框?

JSF Flash cookie 在应用程序重启时引发错误

java - Tomcat 7 找不到我的类抛出 javax.el.E​​LException : java. lang.NoClassDefFoundError

javascript - Swipebox - 单独打开图像而不是画廊

android - 错误在启动AVD时意味着什么

jsf - 为什么我的 p :progressBar not displayed, 只有数字?