2011-04-18 91 views
9

我有一個<h:selectBooleanCheckbox value="#{someBean.prop}">其中propint類型的屬性。它真的不能馬上工作嗎?我是否必須實現一個自定義轉換器來將Boolean轉換爲int?有沒有人碰巧有庫存的轉換器代碼?我讀到JSF 2.0中存在一些錯誤,它會阻止處理<h:selectBooleanCheckbox>的轉換器。任何人都可以證實嗎?綁定h:selectBooleanCheckbox值爲int /整數而不是布爾值/布爾值

我使用的MyFaces 2,戰斧和Tomcat 6

回答

23

<h:selectBooleanCheckbox>應,正如它的名字說,被綁定到booleanBoolean財產。沒有其他的。它允許converter屬性實際上是bug in the spec。它永遠不應該允許它。

問題在於你的模型更多,你爲什麼要用int來表示一個布爾狀態?改變你的模型,讓它成爲一個完整的boolean

如果改變模型是不是出於某種原因的選項(第三方API,一個愚蠢的建築師,或者愚蠢的業務限制等),然後包裹模型的getter/setter的支持Bean像如下

public boolean isChecked() { 
    return someModel.getSomeInt() != 0; 
} 

public void setChecked(boolean checked) { 
    someModel.setSomeInt(checked ? 1 : 0); 
} 

並用它代替<h:selectBooleanCheckbox value="#{bean.checked}" />

+0

謝謝!我將使用包裝器方法,因爲模型不是我的。 – geeehhdaa 2011-04-19 08:41:08

+1

可以視爲垃圾郵件,但Balus我愛你。我遇到了同樣的問題,並提供了一個未觸發的自定義轉換器。爲我節省了很多時間。謝謝! – onigunn 2011-09-18 11:37:15

+3

@asrijaal:你非常歡迎,但對不起,我已經結婚了。 – BalusC 2011-09-19 02:09:04

2

只是說MySQL沒有布爾型作爲字段類型選擇,它可能是這種需求的一個例子。

+3

我只是在持久性/模型方面而不是商業方面解決它。如果JDBC,例如'model.setSomeBoolean(resultSet.getInt(columnname)!= 0)'等等。如果可以創建JPA自定義映射類型。 – BalusC 2012-01-15 18:24:41