Сохранение нескольких полей в одном свойстве управляемого компонента - PullRequest
1 голос
/ 22 февраля 2012

Начиная с здесь У меня есть следующая проблема:

Я генерирую случайное количество полей формы (Это не случайно, но пользователь можетв любой момент измените их число) и я хочу сохранить всю эту информацию в свойстве Managed Bean ArrayList.

<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 Ответ

1 голос
/ 22 февраля 2012

Вы получили ошибку преобразования, потому что вы пытаетесь установить переданное значение 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" /> также внутри цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...