2013-12-18 73 views
2

我有以下文件張貼在JSF中。字符編碼JSF中的亂碼字符

<h:panelGrid columns="2"> 
       <h:outputText value="Klubbnamn"></h:outputText> 
       <h:inputText name="clubname" value="#{club.name}"></h:inputText> 
      </h:panelGrid> 
      <h:commandButton value="Spara" action="#{serviceHCP.saveClub(club) }"></h:commandButton> 

寫作ääö作爲發佈的價值將使我åäö回來。在xhtml文件中編寫的所有內容看起來應該是隻有發佈的值纔會出現亂碼。如果我在java類中硬編碼它,它將被正確地保存在數據庫中。所以我肯定這個帖子有問題。

我試過將網頁切換到is0-8859-1而沒有結果。 Tomcat報告默認爲utf-8。

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><html xmlns="http://www.w3.org/1999/xhtml"><head><link type="text/css" rel="stylesheet" href="/BowlingFacelets/faces/javax.faces.resource/theme.css?ln=primefaces-aristo" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Default title</title> 
    <link rel="stylesheet" type="text/css" href="hcp-style.css" /></head> 

<body> 

..... 

<td>ID</td> 
<td>klubb</td> 
</tr> 
<tr> 
<td>1</td> 
<td>åäö</td> 
.... 

回答

1

這絕對看起來像請求編碼的問題。您應該使用FireBug或類似Wireshark的工具檢查HTTP POST的請求字符編碼標頭。

在請求標題中查找Content-Type。它必須包含:charset=utf-8

如果情況並非如此,那麼設置中的某些內容是錯誤的,因爲JSF應該照顧請求字符編碼。

儘管您可以嘗試在自制過濾器中設置字符編碼。這可能是這樣的:

@WebFilter("/*") 
    public class CharEncodingFilter implements Filter { 

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

參見:

類似的問題:

+0

只是爲了誰的人有麻煩像我這樣的「@WebFilter無法解析」可以檢查在這裏:http://mvnrepository.com/artifact/javax.servlet/javax .servlet-API/3.0.1 – kavain