如果值来自数据库对象,则 <tr:selectOneRadio> 的默认值

Default value for <tr:selectOneRadio> if the value is from database object

我为此苦苦挣扎了很长时间。我正在更改代码,我需要将默认值设置为来自 Trinidad 的 selectOneRadio 元素。我有来自数据库的对象(例如称为 result)。此对象具有属性 decision。在 select 元素值参数中以这种方式使用 value="#{result.decision}".

现在我需要 If result.decision is empty 将值设置为 True。如果值为 False let/set 值为 False。如果值为 True let/set 值为 True。我在模板中试过这样的东西:

 <tr:selectOneRadio id="decision" value="#{viewBean.changeValueToOne(result)}" autoSubmit="true" immediate="true">
        <f:selectItem itemValue="true" itemLabel="Yes"/>
        <f:selectItem itemValue="false" itemLabel="No"/>
 </tr:selectOneRadio>

而 viewBean 中的这个函数:

public Boolean changeValueToOne(ResultDTO result) {
    if (result.getDecision() == null) {
        result.setDecision(Boolean.TRUE);
    }
    return result.getDecision();
}

但是当我这样做时,我只得到一个字符串值而不是 selectOneRadio 元素。只有 "Yes" 或 "No" 值。

如何将 selectOneRadio 元素的默认值设置为对象的值并获得正常的 selectOneRadio,而不仅仅是一个值。

编辑

这是来自模板的代码。决策是数据库中我需要更改值的对象:

<tr:selectOneRadio id="decisionYes" value="#{viewBean.defaultDecision}" valueChangeListener="#{viewBean.valueChangedOneRadioListener(decision)}"
                                           autoSubmit="true" immediate="true">
     <f:selectItems value="#viewBean.decisionStates}"/>
</tr:selectOneRadio>

这是来自 viewBean 的侦听器方法:

public void valueChangedOneRadioListener(DecisionDTO decision, ValueChangeEvent event)
{
    if(event.getNewValue() != null) {
        if((Boolean)event.getNewValue().equals(Boolean.TRUE))
        {
            decision.setDecision(Boolean.TRUE);
        } else {   
            decision.setDecision(Boolean.FALSE);
        }
        // this is variable used in selectRadio
        this.setDefaultVyjadreni((Boolean)event.getNewValue());
    }
}

当我 运行 这段代码时,我遇到了错误,因为找不到方法。

javax.faces.event.AbortProcessingException: Method valueChangedOneRadioListener not found

我为 Trinidads selectOneRadio 使用整数值。 您可以通过设置您的值来设置默认值。 您使用 valueChangeListener 对更改事件作​​出反应。

<tr:selectOneRadio
    id="maschineId"
    value="#{yourBean.yourIntValue}"
    valueChangeListener="#{yourValueChangeListener}"
    autoSubmit="true">
        <f:selectItem itemValue="1"/>
        <f:selectItem itemValue="0"/>
</tr:selectOneRadio

您的 backingBean 看起来像这样:

public void yourValueChangeListener(ValueChangeEvent event)
{
    if(event.getNewValue() == null)
        return;

    if((Integer)event.getNewValue() ==  1)
    {
        //react on a change to 1
    }
    if((Integer)event.getNewValue() ==  0)
    {
        //react on a change to 0
    }
}
public int getYourIntValue() {
    return yourIntValue;
}

public void setYourIntValue(int yourIntValue) {
    this.yourIntValue = yourIntValue;
}