在同一Managed Bean属性中保存多个字段

时间:2012-02-22 07:46:35

标签: java jsf

here开始我遇到以下问题:

我正在生成一个随机数量的表单字段(它不是随机的,但用户可以随时更改它们的数量)并且我想将所有这些信息保存在Managed Bean ArrayList属性中。 / p>

<ui:repeat var = "ctr" value = "#{controller.tipCounter}">
    <h:outputLabel for = "tip" value = "#{appMessage['form.tip']} ##{ctr} :" />
    <h:inputText id = "tip" value="#{controller.tipList}" maxlength="100" />
</ui:repeat>

在控制器中我有以下属性:

private List<String>tipList;
//Get+Set

除了一些不受欢迎的行为(映射此列表的所有表单字段都以[]作为其值),抛出此警告:

INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=fm-story:j_idt60:0:tip[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]
sourceId=fm-story:j_idt60:1:tip[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]

1 个答案:

答案 0 :(得分:1)

您收到转化错误,因为您尝试将提交的String值设置为List<String>属性,因为该属性没有标准转换器且您尚未声明任何转换器。

毕竟,你不应该需要任何一个。这种语法根本不正确。您需要将String值绑定到String属性。您需要通过索引引用列表。我也不确定为什么你需要2个清单。 tipCounter似乎完全没必要。

这是重写:

<ui:repeat value="#{controller.tipList}" var="tip" varStatus="loop">
    <h:outputLabel for="tip" value="#{appMessage['form.tip']} ##{loop.count} :" />
    <h:inputText id="tip" value="#{controller.tipList[loop.index]}" maxlength="100" />
</ui:repeat>

您可能还想在循环中添加<h:message for="tip" />