Xpages更多字段(无限制)点击按钮

问题描述:

我想从x号开始。的字段(在我的应用程序中,我有一对文本数据字段和数字数据字段)在xpage应用程序(比如10对)上,然后当用户点击“更多字段”时,我希望更多的对动态显示而不需要满在网页上刷新,但想无限无。字段(只要页面没有崩溃),然后我想提交表单和所有这些字段的数据。实现这个最好的方法是什么?Xpages更多字段(无限制)点击按钮

<inputText value="#{contact.firstName}" /> 

然而,数组符号也被支持:

通常,字段使用点符号绑定到一个文档数据源

<inputText value="#{contact['firstName']}" /> 

因为在后者的语法中的字段名称正在视为字符串,而不是bean的隐式属性,它可以动态计算。我发现定义这些动态字段最简单的方法是为每种基本类型的字段创建一个自定义控件,并将每个字段定义为接受数据源和字段名称。等等领域本身然后用类似如下的语法结束:

<inputText value="#{compositeData.dataSource[compositeData.fieldName]}" /> 

通过使用语法,任何一个复杂的计算可以用来确定传递给自定义控件什么字段名。在方案中,您正在试图完成的,在围绕该领域对将允许你指定一个字段后缀为每...也许像下面这样的重复控制指定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> 

有了这个方法,最终会得到名为“fullName_0”,“fullName_1”等的字段,直到在viewScope中指定的限制。通常,唯一的问题是确保在打开现有文档时,将viewScope变量设置回正确的限制。当然,另一种方法实际上是将限制另存为文档上的另一项,并将重复值绑定到文档上。

+0

谢谢蒂姆,一定会给你一个去,让你张贴。我没有尝试过,但只是想知道是否对重复控制进行了部分刷新,我不会丢失现有数据? – pipalia 2012-03-15 13:40:02

+3

我非常想沿着完全相同的路线回答这个问题,这个方法可以工作,我建议计算'重复限制'与viewScope限制相同,所以你不要理解为什么新字段没有出现你打了30之后。 – 2012-03-15 13:50:07

+1

伟大的建议,Declan。当然,你也可以附加一个寻呼机到重复,但对于这种类型的界面,大多数用户不会希望分页可以按照他们对视图类型接口的方式使用,所以只需强制“rows”属性始终匹配限制就是可能更可取。 – 2012-03-15 13:53:14

你也可以看看练习23“Tablewalker”。它不会执行多个字段,但会执行多值字段,这在处理和存储方面可能会更好(您可以执行@Elements查找文档中有多少字段)。练习在这里: http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Tutorial-Introduction-to-XPages-Exercise-23 虽然按钮一次只添加一行,但很容易调整。

+0

谢谢你,会给这个去 – pipalia 2012-03-15 22:03:36

你可以做的是拥有一个带有2个字符串值的Bean标签和数据以及一个托管bean,该托管bean拥有该对象的ArrayList,因此在重复控制之内,您将重复绑定到ArrayList,然后绑定您的xp:inputText将rowData.Data和你的xp:label添加到rowData.Label,然后当你想添加另外5行时,你只需要添加更多的对象到ArrayList中然后刷新你的页面,你的数据仍然会存在你的数组列表中,并且你将有5个新增空对象,您可以在其中添加数据。

public class Data { 

private String label; 
private String data; 

public Data() { 

} 
//getters and setters 

} 

public class ManagedBean { 

private ArrayList<Data> datalist; // add a managed property for this one so It will create a new one when needed. 

// getters and setters 

public addFiveMoreObjects() { 
    Data newItem; 
    for (int i=0; i<5; i++) { 
     newItem = new Data(); 
     datalist.add(newItem); 
    } 
} 

} 

<xp:repeat value="#{managedBean.datalist}" var="rowData"> 
<xp:text value="#{rowData.label}" /> 
<xp:inputText value="#{rowData.data} /> 
</xp:repeat> 

<xp:button value="Add 5 More"> // call #{managedBean.addFiveMoreObjects} 
+0

这看起来很有趣,非常感谢分享。由于我还没有启动Javabeans dev,我可能会先尝试其他方法。 – pipalia 2012-03-15 22:05:29