2011-12-16 59 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