看起來轉換器通常有兩種方法getAsObject()
和getAsString()
,它們會將對象轉換爲字符串或從字符串轉換爲對象。jsf中轉換器的用途是什麼?
爲什麼我們需要這樣做?
例如,在dataTable
中,我們總是可以將對象與var
綁定。爲什麼我們不能在這裏做類似的事情?
看起來轉換器通常有兩種方法getAsObject()
和getAsString()
,它們會將對象轉換爲字符串或從字符串轉換爲對象。jsf中轉換器的用途是什麼?
爲什麼我們需要這樣做?
例如,在dataTable
中,我們總是可以將對象與var
綁定。爲什麼我們不能在這裏做類似的事情?
最後,客戶端(通常是瀏覽器)將收到您通常通過.xhtml文件構建的JSF Component樹的渲染版本。
例如,瀏覽器不知道約BigDecimals
或Dates
。如果在表單的輸入字段中輸入「1.003」,瀏覽器應該如何知道它是否爲服務器端的String
或float
或BigDecimal
?它無法知道,也無法處理。因此服務器和瀏覽器之間的通信總是通過Strings
。 HTML呈現時,將使用getAsString()
方法。當處理傳輸的表單輸入時,JSF將使用getAsObject()
將其轉換回真實類型。
爲什麼var
在dataTables中工作?因爲在這裏你只會走「一條路」。 dataTable將只顯示一些內容,因此可以使用通用的toString()
方法。在這種情況下,不需要轉換爲對象。
我會複製和粘貼balusc爲什麼我們應該用一個JSF轉換器一個偉大的答案(我不記得問題本身的鏈接)
JSF生成HTML。用Java來說HTML基本上就是一個大字符串。要用HTML表示Java對象,必須將其轉換爲String。另外,當提交HTML表單時,提交的值在HTTP請求參數中被視爲String。在封面之下,JSF從HttpServletRequest#getParameter()
中提取它們返回String.To要在非標準的Java對象(即不是EL有內置轉換的字符串,數字或布爾值)之間進行轉換 您必須提供一個自定義的Converter for您的實體類。此Converter實現了兩種方法getAsString()
方法,以便所需的Java對象以唯一的字符串表示形式和方法表示,以便HTTP請求參數可以轉換回所需的Java對象