每次需要新目标时,我需要在一行中创建3个字段。 objective1,midYear1,endYear1。然后,如果我添加一个目标,objective2,midYear2,endYear2等等。一切似乎都是有效的,第一次,但第二次它创造了大量的领域。我假设它是嵌套/不嵌套/正确使用我的重复的方式,因为我的viewScope变量都是正确的,所以它只是显示我自己混淆的字段。我只需要在每一列中的3个字段中的每个字段,然后新的行和重复.....下面的代码,但是如果有人有更好的方法,我也愿意接受建议.....谢谢
<xp:this.data>
<xp:dominoDocument
var="document1"
formName="objective">
</xp:dominoDocument>
</xp:this.data>
<xp:repeat id="repeat1" rows="100" value="#{viewScope.fields}"
var="fieldName">
<xp:repeat id="repeat2" rows="100" value="#{viewScope.fields2}"
var="fieldName2">
<xp:repeat id="repeat3" rows="100" value="#{viewScope.fields3}"
var="fieldName3">
<div class="row">
<div class="col-xs-4">
<xp:label value="#{fieldName}" for="inputText1">
</xp:label>
<xp:inputText id="inputText1">
<xp:this.value><![CDATA[#{document1[fieldName]}]]></xp:this.value>
</xp:inputText>
</div>
<div class="col-xs-4">
<xp:label value="#{fieldName2}" for="inputText2">
</xp:label>
<xp:inputText id="inputText2">
<xp:this.value><![CDATA[#{document1[fieldName2]}]]></xp:this.value>
</xp:inputText>
</div>
<div class="col-xs-4">
<xp:label value="#{fieldName3}" for="inputText3">
</xp:label>
<xp:inputText id="inputText3">
<xp:this.value><![CDATA[#{document1[fieldName3]}]]></xp:this.value>
</xp:inputText>
</div>
</div>
</xp:repeat>
</xp:repeat>
</xp:repeat>
<xp:button
value="Add Objective"
id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial"
refreshId="repeat1">
<xp:this.action><![CDATA[#{javascript:
if (!viewScope.fields) {
viewScope.fields = [];
viewScope.fields2 = [];
viewScope.fields3 = [];
var count:integer = 1;
}
viewScope.fields.push("Objective" + (viewScope.fields.length + 1));
viewScope.fields2.push("MidYear" + (viewScope.fields2.length + 1));
viewScope.fields3.push("EndYear" + (viewScope.fields3.length + 1));
count = count+1;
}]]></xp:this.action>
</xp:eventHandler>
答案 0 :(得分:0)
问题在于,通过嵌套,对于coumn 1中的每个条目,您将创建第2列的 n 实例。然后,对于列中的每个条目,您将创建 n < / em>第3列的实例。如果您需要这种方法,最好创建一个viewScope变量,其中每个元素都有每个目标的字段名(作为对象或数组),然后只使用单个重复单个viewScope变量。
为Notes客户端/传统Domino Web构建这一点在历史上是一个巨大的痛苦,因为限制是您无法在同一UI中轻松编辑多个文档,因为Form既是存储架构,也是UI的设计
XPages意味着不再是限制。 XPage是UI,(dominoDocument / bean)数据源是存储的模式。
因此,我首选的方法是将存储结构分解为更细粒度的元素。所以每个目标都是它自己的文档,固定绑定到“objective”,“midYear”,“endYear”。
然后有多种方法可用于创建新条目。一个是顶部的单个固定行,带有scope="request" ignoreRequestParams="true"
的dominoDocument数据源。然后保存可以将NoteID / UNID添加到重复,然后从相关文档中检索值以进行显示/编辑。
更高级的方法是使viewScope变量具有附加选项(在开头或结尾),然后计算重复内的dominoDocument数据源以检索相关文档(即action="openDocument"
)或创建一个新的(即action="newDocument"
)。