单击按钮可以显示更多字段(无限制)

pip*_*lia 5 xpages

我想从x开始.在xpage应用程序(比如10对)上的字段(在我的应用程序中我有一对文本数据字段和数字数据字段)然后当用户点击"更多字段"时,我希望更多对在没有完整的情况下动态显示刷新页面,但想无限制.字段(只要页面不崩溃)然后我想提交所有这些字段的表单和数据.实现这个的最佳方法是什么?

Tim*_*ony 17

通常,字段使用点表示法绑定到文档数据源:

<inputText value="#{contact.firstName}" />
Run Code Online (Sandbox Code Playgroud)

但是,也支持数组表示法:

<inputText value="#{contact['firstName']}" />
Run Code Online (Sandbox Code Playgroud)

因为后一种语法中的字段名称被视为字符串,而不是bean的隐式属性,所以可以动态计算它.我发现定义这些动态字段最简单的方法是为每个基本类型的字段创建一个自定义控件,并将每个字段定义为接受数据源和字段名称.因此,字段本身最终会使用类似于以下内容的语法:

<inputText value="#{compositeData.dataSource[compositeData.fieldName]}" />
Run Code Online (Sandbox Code Playgroud)

通过使用该语法,可以使用任何复杂度的计算来确定要传递给自定义控件的字段名称.在您尝试完成的场景中,在围绕字段对的重复控件上指定indexVar将允许您为每个指定字段后缀...可能类似于以下内容:

<xp:repeat indexVar="fieldSuffix" value="#{viewScope.rowCount}">
 <xp:div>
  <xc:dynamicInputText dataSource="#{contact}" fieldName="fullName_#{fieldSuffix}" />
  <xc:dynamicInputNumber dataSource="#{contact}" fieldName="phoneNumber_#{fieldSuffix}" />
 </xp:div>
</xp:repeat>
Run Code Online (Sandbox Code Playgroud)

使用这种方法,您最终会得到名为"fullName_0","fullName_1"等的字段,直到viewScope中指定的限制.通常,唯一的复杂因素是确保在打开现有文档时,将viewScope变量设置回正确的限制.当然,另一种方法实际上是将限制保存为文档中的另一个项目,并将重复值绑定到它.

  • 我几乎要按照完全相同的方式回答这个问题,这个方法会起作用,我建议将'重复限制'计算为与viewScope限制相同,这样你就不会想知道为什么新的字段没有出现了你打了30. (3认同)