我正在尝试生成一个带有变量的表单 - 在服务器端 - 文本字段的数量。挂毯页面类似于:
<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 不接受这一点,因为它使用
组件 ID 'typeOfIncome-${typeOfIncome.propertyIndex}' 无效;组件 ID 必须是有效的 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
值列表中为空。这些值发布为:
typeOfIncome First
typeOfIncome_0 Second