2011-10-18 46 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。 –

相關問題