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

时间:2014-09-15 10:59:57

标签: xpages

我创建了一个简单的重复控件,里面有2个简单的inputText s。在此重复控件之外,有一个可编辑的inputText3(绑定到dataSource)。我正在用它在重复控制中进行一些计算。计算显示正确。我有2个按钮,用于newLine和delete / hideLine。目前,重复控件中的那两个字段没有绑定到数据源。

我有一个保存文档的按钮,并将其列在viewPanel中,第一列inputText3可点击。我注意到如果我打开文档(在编辑或读取模式下),这个可编辑的字段值被正确显示,但是重复控件内的字段都是null,即使我在使用save方法之前添加了一些值。

我还尝试在表单(/ datasource)中创建2个字段并将此inputTexts绑定到它们,但重复控制字段再次为空。

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

...

 <xp:inputText id="inputText1"></xp:inputText>

 <xp:inputText id="inputText2"></xp:inputText>

重复之外的可编辑字段:

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

<xp:this.data>
        <xp:dominoDocument var="docrepeat" formName="docrepeat"></xp:dominoDocument>
    </xp:this.data>

我肯定在这里遗漏了一些东西,希望能够找到一个功能性解决方案。

我应该使用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>

我的小方案在这里描述:Xpages how to obtain/create this calculations module

2 个答案:

答案 0 :(得分:0)

我认为重复内部的数据源是一个视图。您需要在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,并将其作为文档提供给repeat(由noteID引用)。将其作为文档提供将允许它保存值。您可能无法使用值选择器,只需键入字段名称即可。

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

答案 1 :(得分:0)

Tim Tripcony撰写的这篇博文可能有助于http://www.timtripcony.com/tim/blog.nsf/d6plinks/TTRY-86EMBS