2011-12-16 70 views
1

我目前有一個簡單的彈出應用程序,一個簡單的頁面,一個簡單的bean支持。下面是來自網頁上的相關片段...如何防止selectOneRadio預設爲默認布爾值?

<h:selectOneRadio id="q1" value="#{controller.formBean.question1}"> 
    <f:selectItem itemValue="true" itemLabel="Yes" /> 
    <f:selectItem itemValue="false" itemLabel="No" /> 
</h:selectOneRadio> 

而且從支持bean,的formBean:

private boolean question1; 
public void setQuestion1(boolean question1) { 
    this.question1 = question1; 
} 
public boolean isQuestion1() { 
    return question1; 
} 

而且控制器實例的豆(驗證不爲空)。

但是,這是問題的一部分,因爲初始化默認爲false布爾值時,這種控制形式總是「不」預選的「默認回答」。我想讓用戶明確地選擇是或否,所以我需要確保單選按鈕沒有預先填充。

我嘗試了所有的領域轉換爲布爾(所以我可以代表真/假/空),但春天​​崩潰,想不布爾布爾值。

任何人有任何想法?我是Spring的新手,我確信我錯過了一些非常簡單的東西。

回答

2

使用Boolean代替booleanBoolean有第三個「狀態」:null。我不確定你在嘗試使用「春天坍塌」時的意思。

更清潔的替代是使用enum代替。

public enum Choice { 
    Yes, No; 
} 

public Choice[] getChoices() { 
    return Choice.values(); 
} 

<h:selectOneRadio id="q1" value="#{controller.formBean.question1}"> 
    <f:selectItems value="#{data.choices}" /> 
</h:selectOneRadio> 

,並使用

private Choice question1; 
+0

我提到我已經使用布爾嘗試。在加載頁面時,我得到了致命的錯誤,我不幸沒有保存... IIRC它有一個NPE。我的同齡人對枚舉有奇怪的看法,我不認爲我可以放棄使用一個....對布爾的任何見解? – yep 2011-12-16 15:30:01