Я пытаюсь создать форму с переменной - на сервере сторона - количество текстовых полей. Страница гобелена выглядит примерно так:
<form t:id="form">
<t:loop source="typesOfIncome" value="typeOfIncome">
<input t:type="TextField" t:id="typeOfIncome-${typeOfIncome.propertyIndex}" value="100"/>
</t:loop>
</form>
Это не принимается Tapestry, поскольку оно выдает с помощью
Идентификатор компонента 'typeOfIncome - $ {typeOfIncome.propertyIndex}' недействителен; идентификаторы компонентов должны быть действительными идентификаторами Java: начинаться с буквы и состоять из букв, цифр и знаков подчеркивания.
Как добиться этого с помощью Tapestry? И как код Java будет выглядеть в компоненте?
Обновление :
Для компонента, который выглядит так:
public class FormSample {
@Component
private Form _form;
@Inject
private Logger _log;
@Property
private List<String> _typesOfIncome;
@Property
private String _typeOfIncome;
@SetupRender
void setupRender() {
_typesOfIncome = Arrays.asList("First", "Second");
}
void onSuccess() {
_log.info("Got values " + _typesOfIncome + " .");
}
}
и страницы, содержащей
<form t:id="form">
<t:loop source="typesOfIncome" value="typeOfIncome">
<input t:type="TextField" t:id="typeOfIncome" t:value="typeOfIncome"/> <br/>
</t:loop>
<input type="submit" value="Save"/>
</form>
, в onSuccess
список значений равен нулю. Значения POSTED как:
typeOfIncome First
typeOfIncome_0 Second