2010-02-09 100 views
2

IE似乎忽略了JSTL中的fmt標籤。我已經嘗試過使用fmt:formatNumber和fmt:formatDate,既不能在IE中工作,但它們可以在所有其他瀏覽器中工作。 (我正在使用IE8和JSTL 1.1)JSTL fmt標籤在IE中不起作用?

這是已知問題嗎?

這裏的代碼示例不起作用:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<fmt:formatNumber maxIntegerDigits="2">2003</fmt:formatNumber> 
<fmt:formatNumber maxIntegerDigits="2" value="2003" /> 

回答

6

JSP/JSTL執行服務器端,它無關,與你使用的是什麼瀏覽器。

某些東西在您的服務器上配置錯誤。

你是什麼意思的「不工作」?它是否會拋出異常,是否會給你一個空白頁面,什麼?


編輯:fmt標籤由正在執行的線程的當前區域設置,該彈簧從HTTP請求需要的影響。如果IE瀏覽器傳遞了與其他瀏覽器不同的語言環境指示(出於某種原因,我不知道爲什麼),那麼fmt標記可能會更改其輸出。

要麼你需要確保所有的瀏覽器都經過相同的區域,也可以將其覆蓋在JSP,迫使它是每個人都一樣:

<fmt:setLocale> - 設置默認 語言環境指定的範圍。這 將覆蓋基於瀏覽器的區域設置。

+0

我發佈的代碼(同一事物的兩個變體)應該顯示「03」,如果我在FF,Opera,Chrome或Safari中打開頁面,它會執行此操作。如果我在IE中打開它,它會顯示「2003」。所以IE似乎忽略了fmt標籤。其他JSTL標籤,如c:和sql:在IE中正常工作。 – 2010-02-09 10:18:37

0

我找到了解決方案! 如果我先使用fmt:setLocale標記,其他標記開始工作,出於某種原因...似乎不關心我設置它的任何區域設置。

1

任何不發送Accept-Language請求標頭的瀏覽器都會遇到此問題。最好的解決方案是設置fallbackLocale屬性,該屬性是未指定Accept-Language時將使用的語言環境。

該屬性可以在任何範圍(頁面,請求,應用程序,會話)中設置。需要設置的屬性是'javax.servlet.jsp.jstl.fmt.fallbackLocale。 範圍',其中範圍是您設置它的適當值。

所以,將其設置爲整個應用程序,這樣做:

servletContext.setAttribute( 「javax.servlet.jsp.jstl.fmt.fallbackLocale.application」,java.util.Locale中。我們);

把這個放在ServletContextListener中的最佳位置。

如果您只需要爲某些頁面做到這一點,那麼你也可以做以下的JSP:

<%pageContext.setAttribute(「javax.servlet.jsp.jstl.fmt.fallbackLocale .page「,java.util.Locale。我們); %>

+0

偉大的答案 - 我用這個代碼,它的工作。這發生在我的老版本的IE6。 – GavinR 2011-03-25 17:43:10