2011-10-18 113 views
1

我Util.java含有以下的方法:如何检查用户是否使用Android浏览器?

public static boolean isAndroid(HttpServletRequest request) { 
    boolean retVal = false;  
    String browser = request.getHeader("User-Agent"); 
    if (browser != null && !browser.trim().equals("") && browser.contains("Android")) { 
     retVal = true; 
    }  
    return retVal; 
} 

我已经在下面BaseAction.java代码(它也有请求类型的HttpServletRequest的变量),其延伸ActionSupport的&实现ServletRequestAware,ServletResponseAware。现在

public boolean isAndroid(){ 
    return Util.isAndroid(request); 
} 

,我想在JSP中检查设备是Android的&如果是执行某些动作,所以我用下面的代码:

<s:if test="%{#android=='false'}"> 
    <a href="/myUrl"></a> 
</s:if> 
<s:else> 
    .... 
</s:else> 

但上面的代码似乎并不上班。任何人可以建议为什么它不工作&如果有另一种方法来检查JSP以查看用户是否使用Android浏览器?

谢谢!

回答

1

你比较对字符串"false"但应检查,对真正的布尔值,并且可以使用<s:if test="android"><s:if test="!android">的要求。该#字符仅用于堆栈中的上下文命名为值 -

此外,你有#,这是没有必要的值被推到堆栈前缀属性名。

所有这一切说,为什么这么麻烦呢?

+0

从我+1,值得更多upvotes。 – Shahzeb

0

我想下面的JavaScript代码会对你有所帮助;

var ua = navigator.userAgent.toLowerCase(); 
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); 
if(isAndroid) { 
// Do some action you want to! 
} 

只是检查出来..

感谢。

+0

我不想用Javascript。我如何在JSP中使用它? – Mike

1

在JSP

<c:set var="browser" value="${header['User-Agent']}" scope="session"/> 
2
String userAgent = request.getHeader("User-Agent"); 
boolean isAndroid = (userAgent != null && !userAgent.isEmpty() && userAgent.toLowerCase().contains("android")); 
0

这是EL使用的是在这里吗?我记得$是我们在EL中使用的字符,而不是代码中的%字符。而且我认为在与android属性进行比较时,您不需要使用'false'的单引号。所以我认为这应该工作。但请检查您是否可以先访问页面中的“android”变量。检查以下代码是否正在工作。

<s:if test="${android eq false}"> 
    <a href="/myUrl"></a> 
</s:if> 

OR

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
<s:if test="${fn:contains(header['User-Agent'],'Android'}"> 
    <a href="/myUrl"></a> 
</s:if> 
+1

'%{}'是Struts 2的OGNL转义;它不是JSP EL。 –

相关问题