Xpages 如何正确存储和保存重复控件中的字段值

Xpages 如何正确存储和保存重复控件中的字段值,xpages,Xpages,我创建了一个简单的repeat控件,里面有两个简单的inputTexts。在这个repeat控件之外,有一个可编辑的inputext3(绑定到数据源)。我用它在repeat控件中进行一些计算。计算结果显示正确。我有两个按钮,用于换行和删除/隐藏线。目前,repeat控件中的这两个字段没有绑定到数据源 我有一个保存文档的按钮,并将其列在视图面板中,第一列inputText3,可单击。我注意到,如果我打开文档(在编辑或读取模式下),此可编辑字段值将正确显示,但repeat控件中的字段都为空,即使我在

我创建了一个简单的repeat控件,里面有两个简单的
inputText
s。在这个repeat控件之外,有一个可编辑的
inputext3
(绑定到数据源)。我用它在repeat控件中进行一些计算。计算结果显示正确。我有两个按钮,用于换行和删除/隐藏线。目前,repeat控件中的这两个字段没有绑定到数据源

我有一个保存文档的按钮,并将其列在视图面板中,第一列
inputText3
,可单击。我注意到,如果我打开文档(在编辑或读取模式下),此可编辑字段值将正确显示,但repeat控件中的字段都为空,即使我在使用save方法之前添加了一些值

我还尝试在表单(/datasource)中创建两个字段,并将这个inputExt绑定到它们,但重复控制字段也是空的

 <xp:repeat id="repeat1" var="varRepeat" indexVar="index">
 <xp:this.value><![CDATA[#{javascript:parseInt(sessionScope.dField)
 }]]></xp:this.value>


“重复”对话框外的可编辑字段:

<xp:inputText id="number" value="#{docrepeat.valtotala}"
        defaultValue="100">
</xp:inputText>


我肯定错过了一些东西,希望能找到一个功能性的解决方案

我应该使用repeat的var属性绑定2 inputText吗

或者我如何才能做到这一点

重复控制代码:

<xp:repeat id="repeat1" var="test" indexVar="index" rows="8">
            <xp:this.value><![CDATA[#{javascript:parseInt(sessionScope.DField)
}]]></xp:this.value>
<xp:panel>
            <xp:table >
                <xp:tr>
                    <xp:td>

                        <xp:inputText id="inputText1">
                            <xp:eventHandler event="onchange"
                                submit="false">
                                <xp:this.script><![CDATA[try
{
var idx="view:_id1:inputText3";
var index=document.getElementById(idx).value;

var number="view:_id1:number";
var val=document.getElementById(number).value;

var sum = val;

for(var i=0;i<index;i++) {
var input1="view:_id1:repeat1:"+i+":inputText1"
var nr1=document.getElementById(input1).value;

sum-=nr1;
document.getElementById("view:_id1:repeat1:"+i+":inputText2").value = sum;
}
// calculating some %
document.getElementById("view:_id1:test").value = parseInt((sum*100)/val); 

}
catch(e)
{
alert("not working");
}]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:inputText>
                        <xp:inputText id="inputText2"></xp:inputText>
                    </xp:td>
                </xp:tr>
            </xp:table>
            </xp:panel>
        </xp:repeat>


这里描述了我的小场景:

我认为repeat中的数据源是一个视图。您需要在repeat中添加对象数据的数据源。方法是在repeat中创建一个面板,并为该面板提供一个数据源,如下所示

<xp:repeat id="repeat1" rows="30" value="#{view1}"
            var="rowData">
        <xp:panel>


 <xp:dominoDocument var="objectData1"
                        formName="Item"
                        documentId="#{javascript:return rowData.getNoteID();}"
                        ignoreRequestParams="true" action="openDocument">
</xp:dominoDocument>

!!!put your stuff in the panel!!!


</xp:panel>
</xp:repeat>

!!!把你的东西放在面板上!!!
因此,正在进行的是重复获取作为视图的数据源。因此,它将遍历视图中的所有条目。但是视图数据源不知道如何处理文档。因此,您将创建objectData,它将获取该特定文档的noteID,并将其作为文档(由noteID引用)提供给repeat。将其作为文档提供将允许其保存值。您可能无法使用值选择器,但只需键入字段名,它就会工作


我不确定我是否完全理解你的问题。但是您还需要保存数据源。因此,您可以在面板中放置“保存”按钮以保存特定文档,也可以使“保存”按钮保存所有数据源。我希望能够单独保存每个文档,因为它允许多个应用程序可以同时编辑。

请发布您的XPage相关部分的代码。我认为我们需要查看数据源。如果您解释了您试图实现的目的,这将容易得多。解释某些领域并不能让我真正了解你想要实现的目标。这是一份用于显示项目各个部分花费了多少时间的文档吗?是否在采购订单上显示行项目?是为了显示谁投了哪位候选人的票?了解目的将有助于我们找出问题所在,并可能指出与以这种方式使用repeat不同的解决方案。@DavidNavarre-这是我描述的场景。您需要表遍历器-在repeat中的数据源不是视图之前描述过。实际上,当我保存文档时,我正试图找出如何正确地进行计算并保存它们。我的重复控件已经有属性了吗?
<xp:repeat id="repeat1" var="test" indexVar="index" rows="8">
            <xp:this.value><![CDATA[#{javascript:parseInt(sessionScope.DField)
}]]></xp:this.value>
<xp:panel>
            <xp:table >
                <xp:tr>
                    <xp:td>

                        <xp:inputText id="inputText1">
                            <xp:eventHandler event="onchange"
                                submit="false">
                                <xp:this.script><![CDATA[try
{
var idx="view:_id1:inputText3";
var index=document.getElementById(idx).value;

var number="view:_id1:number";
var val=document.getElementById(number).value;

var sum = val;

for(var i=0;i<index;i++) {
var input1="view:_id1:repeat1:"+i+":inputText1"
var nr1=document.getElementById(input1).value;

sum-=nr1;
document.getElementById("view:_id1:repeat1:"+i+":inputText2").value = sum;
}
// calculating some %
document.getElementById("view:_id1:test").value = parseInt((sum*100)/val); 

}
catch(e)
{
alert("not working");
}]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:inputText>
                        <xp:inputText id="inputText2"></xp:inputText>
                    </xp:td>
                </xp:tr>
            </xp:table>
            </xp:panel>
        </xp:repeat>
<xp:repeat id="repeat1" rows="30" value="#{view1}"
            var="rowData">
        <xp:panel>


 <xp:dominoDocument var="objectData1"
                        formName="Item"
                        documentId="#{javascript:return rowData.getNoteID();}"
                        ignoreRequestParams="true" action="openDocument">
</xp:dominoDocument>

!!!put your stuff in the panel!!!


</xp:panel>
</xp:repeat>