如何根据浏览器类型呈现组件?

Ben*_*Ben 2 jsf internet-explorer jsf-2

我有一个Web应用程序,如果浏览器是Internet Explorer,我有一些不应该呈现的组件.

我可以在技术上使用jquery,但我认为这是不好的,因为它是客户端代码,并且渲染的属性是在服务器上计算的.

我怎样才能做到这一点?

Bal*_*usC 8

您可以检查User-Agent标头是否包含字符串MSIE.以下是所有"有效"MSIE标题字符串的概述:http://www.useragentstring.com/pages/Internet%20Explorer/ 您将看到所有MSIE字符串共享相同的模式"; MSIE ".你可以查看:

<h:someComponent rendered="#{!header['User-Agent'].contains('; MSIE ')}">
Run Code Online (Sandbox Code Playgroud)

或者当您还没有使用Servlet 3.0/EL 2.2时:

<h:someComponent rendered="#{!fn:contains(header['User-Agent'], '; MSIE ')}">
Run Code Online (Sandbox Code Playgroud)

但是,您需要知道这是一个客户端控制的值,可以轻松更改/欺骗.使用例如条件注释在客户端进行检查更加可靠,因为MSIE实际上是解释它们的唯一浏览器.