2012-06-14 16 views
1

我有最簡單的可能的JSF2表單插入MySQL數據庫中的表字段。JSF2形式到數據庫特殊字符處理

我的facelet在頂部有<?xml version="1.0" encoding="UTF-8"?>

我輸入就像<h:inputText value="#{testController.entity.test}" id="test" />

所以我嘗試的事情在我JPA2/Hibernate的實體插入「PROVA」。然後,我堅持下去,當我在MySQL數據庫中查找保存的值時....

我找到「provÃ」。這是我總是通過嘗試和嘗試解決相同的舊編碼問題....

你能建議我首先檢查什麼來修復它嗎?

我的意思是,我知道這個問題缺乏信息,我只想看看你問我什麼:在你的問題中,我會找到答案! :)

+0

不應編碼在H編纂:表格屬性? xml是.xml文件本身 – SJuan76

回答

1

我的facelet具有<?xml version="1.0" encoding="UTF-8"?>在頂部。

這與問題無關。這隻會告訴XML解析器在將XML文件解析爲基於樹的層次結構之前讀取XML文件內容時使用哪些字符集。

您的具體問題可能有兩個原因:

  1. HTTP請求字符編碼沒有設置正確。然而,這並非正常情況,因爲默認情況下JSF/Facelets已經在所有層中使用了UTF-8。但是,在JSF/Facelets設置適當的字符編碼之前,只要有其他人訪問HTTP請求主體,就會出現此問題。 PrimeFaces 3.x已知可以做到這一點。另見Unicode input retrieved via PrimeFaces input components become corrupted。解決這個問題的方法之一是創建一個類似於UTF-8 form submit in JSF is corrupting data的過濾器。

  2. JDBC連接字符編碼設置不正確。 MySQL JDBC驅動程序使用客戶端平臺默認字符編碼,而不是服務器表字符編碼。請確保你的MySQL JDBC URL看起來像如下:

    jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8 
    
+0

我現在再次嘗試使用h:form acceptcharset =「UTF-8」...沒有任何結果。我排除了opt.2,因爲我在控制器中記錄了錯誤的輸入,實際上沒有數據庫訪問。 PrettyFaces可以和它有什麼關係? –

+0

我還沒有建議使用'acceptcharset'。這確實不能解決你的問題。這是其他人提出了不正確的建議。如果輸入在日誌中已經無效,那麼它就是#1。只需創建該過濾器。 – BalusC

+0

它的工作!但是......這該死的醜陋!爲什麼我必須創建一個過濾器?也許是因爲我使用PrimeFaces上傳過濾器來進行文件上傳,並使用PrettyFaces進行網址重寫。我怎麼能發現爲什麼,在你看來? –

0

嘗試把H:形式acceptcharset = 「UTF-8」在你的XHTML(爲我工作):

+0

它不適用於我... –