2013-09-29 69 views
1

我有從實體類一個NetBeans 7.3.1模板,在Glassfish的4託管製作一個簡單的XHTML頁面實體類僅包含兩個字段,一個ID和一個Name。如果我在「名稱」字段中輸入「café」字樣,則會節省「café」。我已經按照互聯網上發佈的所有建議,但都失敗了。他們都沒有工作過,至少沒有JSF 2.2。請求參數編碼似乎不能設置爲UTF-8

我試圖創建一個自定義過濾器;使用Spring CharacterEncodingFilter過濾器,標題都包含字符集 - > UTF-8。我用Firebug檢查了頁面的字符集,它說UTF-8。

我跑出來的想法。有人有嗎?

順便說一句,在同一個網站項目包含一個RESTful Web服務和Web服務的工作完全保存相同的實體和相同的值(café)。所以,這讓我得出結論:問題出在Facelets上,但是在哪裏?

我使用這個過濾器:

public class CharacterEncodingFilter implements Filter { 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     request.setCharacterEncoding("UTF-8"); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public void destroy() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 
} 

web.xml

<filter> 
    <filter-name>UTFEncodingFilter</filter-name> 
    <filter-class>filter.CharacterEncodingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>UTFEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

東西告訴我,這個過濾器沒有被使用,我放在throw ExceptionInit方法,以及網頁加載並正常發佈。

+0

@BalusC,你必須停止拖曳良好的質量保證職位。你能看到你在做什麼嗎?你說正確的答案是錯誤的,你說我是問題,然後你叫我愚蠢,你改變了一個很好的帖子標題,顯示我正在使用的JSF的特定版本,最後你發佈了一個不起作用的答案對於這個版本的JSF(我沒有例外嘗試)。你怎麼了?如果你願意,你可以提供新的建議,但取消其他人的工作資格並不會讓你獲得任何地方的幫助。 –

+0

答案顯示了Glassfish特定的解決方案,而不是JSF特定的解決方案,因此不便攜;我並沒有直接親自給你打電話,只是因爲原來的標題和代碼的組合,你看起來很愚蠢; JSF版本已經提到了問題;你沒有提到你沒有例外地嘗試過。我的答案適用於我,否則我沒有發佈。顯然,在你的環境中有更多的問題。也許你正在使用PrimeFaces?或者你實際上是在處理GET請求而不是POST請求? – BalusC

回答

4

你嘗試把你的編碼服務器配置文件中itself.For例GlassFish中-web.xml中,就把這行

<parameter-encoding default-charset="UTF-8"/> 
+0

也要在'web.xml'中驗證。 – Omar

+0

它在'glassfish-web.xml'中工作謝謝! –

+0

從技術上講,考慮到這個問題,這不是一個解決方案,而是一種解決方法。如果Web應用程序部署到不同的服務器版本,它仍然會失敗。 – BalusC

0

你的具體問題造成的,因爲你的過濾器初始化失敗,因此從未已投入使用。

你的過濾器初始化失敗的原因很簡單,因爲你在init()方法引發了異常。

@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

你不應該在init()被拋出一個異常,如果你想過濾器成功初始化。

@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
    // NOOP. 
} 
1

我知道這是一個老問題,但前幾天我遇到了這個問題,我正在使用glassfish 4。

我所做的是以下幾點:

    在我的項目
  1. WEB-INF下,我創建了一個名爲 「與GlassFish的web.xml」 的XML文件。
  2. 在GlassFish-web.xml中我加了參數編碼標籤
  3. ,與接收字符等於UTF-8,如下所示:

<glassfish-web-app> 

    <parameter-encoding default-charset="UTF-8"/> 

</glassfish-web-app> 

希望這將有助於有人,因爲起初我認爲「glassfish-web.xml」已經與glassfish文件相關聯,然後我意識到,我必須在我的項目中創建它。