You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin Hilla中布尔值模型映射RadioButton调用read报错问题

问题解决:RadioGroup调用read(model)时报错"The radio button with the value 'true' was not found"

问题代码

const {field, model, read} = useForm(MyModel);
<VerticalLayout style={{ alignItems: 'stretch', width: '18rem', maxWidth: '100%' }}>
  <TextField label="Title" {...field(model.title)} />
  <NumberField label="Order" {...field(model.order)} />
  <RadioGroup label="Status" {...field(model.isEnabled)} >
    <RadioButton value="true" label="Enable" />
    <RadioButton value="false" label="Disabled" />
  </RadioGroup>
</VerticalLayout>

调用read(model)时出现错误:

The radio button with the value "true" was not found.

错误原因

你的RadioButton组件使用的是字符串类型的value("true"、"false"),但model.isEnabled的类型是布尔类型(true、false)。当调用read(model)时,组件会尝试匹配与model.isEnabled值完全一致的单选框选项,布尔值true和字符串"true"属于不同类型,无法匹配,因此抛出找不到选项的错误。

解决方案

方案1:统一单选框value的类型为布尔值

如果你的UI组件支持布尔类型的value,直接修改RadioButton的value为布尔值:

<RadioGroup label="Status" {...field(model.isEnabled)} >
  <RadioButton value={true} label="Enable" />
  <RadioButton value={false} label="Disabled" />
</RadioGroup>

方案2:转换model值的类型为字符串

在调用read(model)前,将model.isEnabled的布尔值转换为字符串,与单选框的value类型匹配:

// 转换布尔值为字符串
model.isEnabled = model.isEnabled.toString();
read(model);

方案3:使用字段转换器(如果useForm支持)

如果你的useForm工具支持字段转换,可以在绑定字段时添加转换器,自动在视图值和模型值之间做类型转换:

<RadioGroup label="Status" {...field(model.isEnabled, {
  converter: {
    // 视图值转模型值:字符串转布尔
    toModel: (viewValue) => viewValue === 'true',
    // 模型值转视图值:布尔转字符串
    toView: (modelValue) => String(modelValue)
  }
})} >
  <RadioButton value="true" label="Enable" />
  <RadioButton value="false" label="Disabled" />
</RadioGroup>

内容的提问来源于stack exchange,提问作者Muhammad Ilyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:59:50