在 Tapestry 4 中,我尝试遍历列表列表(技术上是具有字符串列表作为数据字段的对象列表)。我目前正在通过对组件使用“嵌套”来做到这一点。
(这是伪代码)
<span jwcid="Form">
<span jwcid="@For" source="ognl:Javaclass.TopLevelList" value="ognl:SecondLevelList" index="ognl:index">
<span jwcid="@For" source="ognl:SecondLevelList.List" value="ognl:ListItem" index="ListItemIndex">
<span jwcid="@TextField" value="ognl:ListItem"/>
<span jwcid="@Submit" listener="ognl:listeners.onSubmit"/>
</span></span></span>
然后,onSubmit 侦听器访问 index 和 ListItem 索引页面属性,以及 ListItem 页面属性,以便正确更新 Javaclass.TopLevelList 中的列表。
这很好用,但看起来很糟糕,并且对最终用户来说很麻烦。我宁愿只使用页面底部的一个提交按钮以某种方式模拟此功能。
我已经研究过以某种方式使用覆盖的表单组件来获取其中的“表单控件组件”列表,然后(非常小心地)解析挂毯的命名约定以恢复索引的功能。
如果有人知道如何做到这一点,或者可以解释表单组件(如何/何时提交等),将不胜感激。