我有以下基本的xpage。我想在reg1和over1上添加字段并在total1上显示它。 我想我必须更新over1字段以重新选择新值或类似的东西。它总是显示0。 有什么想法吗?
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.data>
<xp:dominoDocument var="document1" formName="TestHrs"></xp:dominoDocument>
</xp:this.data>
<xp:table style="width:383.0px">
<xp:tr>
<xp:td>Regular</xp:td>
<xp:td>Overtime</xp:td>
<xp:td>Total</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xe:djNumberTextBox id="reg1"
value="#{document1.rgHr1}">
</xe:djNumberTextBox>
</xp:td>
<xp:td>
<xe:djNumberTextBox id="over1"
value="#{document1.ovHr1}">
<xe:this.onChange><![CDATA[var reg1 = getComponent("reg1").getValue()
var over1 = getComponent("over1").getValue();
getComponent("total1").setValue(reg1 + over1);]]></xe:this.onChange>
</xe:djNumberTextBox>
</xp:td>
<xp:td>
<xe:djNumberTextBox id="total1"
value="#{document1.toHr1}" readOnly="true">
</xe:djNumberTextBox></xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xe:djNumberTextBox id="reg2"
value="#{document1.rgHr2}">
</xe:djNumberTextBox>
</xp:td>
<xp:td>
<xe:djNumberTextBox id="over2"
value="#{document1.ovHr2}">
<xe:this.onChange><![CDATA[#{javascript:var total1 = getComponent("reg2").getValue() + getComponent("over2").getValue();
getComponent("total2").setValue(total2);}]]></xe:this.onChange>
</xe:djNumberTextBox>
</xp:td>
<xp:td>
<xe:djNumberTextBox id="total2"
value="#{document1.toHr2}" readOnly="true">
</xe:djNumberTextBox></xp:td>
</xp:tr>
</xp:table>
</xp:view>
答案 0 :(得分:1)
我建议不要使用ssjs而是使用csjs。 在同一事件中,但使用客户端Javascript,将值相加并将总数放在总字段中。
请记住,作为一个只读字段,也许您应该检查属性&#34;显示已禁用的控制权限为只读&#34;。
也许您需要在文档的querySave事件中执行求和,因为作为只读字段,值不会更新。不确定。
答案 1 :(得分:1)
我发现SSJS中的更改最适合onBlur或onKeyUp,并确保我得到一个数字(isNaN)。 CCJS可能会更好,您可以从此链接http://www.bleedyellow.com/blogs/xpages/entry/how_to_create_column_totals_in_xpages_view_and_repeat_controls?lang=en
中看到我将帖子放在下面以获得更好的答案。这不是我的帖子,而是我保留的参考文献。
干杯, 布赖恩
在Notes视图中添加列总数相当容易,但是如何在XPages视图控件或重复控件中完成?我花了一趟2011年的Lotusphere来了解一下。 例如:
我们需要总计: 1.即使在动态调整表格的大小时,也会在总计的列下保持右对齐。 2.显示页面上显示的文档中的值的总和 1.对于此示例,我们需要将一个面板添加到视图的标记或重复控件:
<xp:viewPanel id="viewPanel1">
<xp:this.facets>
<xp:panel xp:key="footer" id="totals1">
<xp:tr>
<xp:td colspan="7"></xp:td>
<xp:td>
<xp:text escape="true" id="computedField1">
</xp:td>
<xp:td colspan="2"></xp:td>
<xp:td>
<xp:text escape="true" id="computedField2">
</xp:td>
<xp:td>
<xp:text escape="true" id="computedField3">
</xp:td>
</xp:tr>
</xp:panel>
</xp:this.facets>
诀窍在于面板的xp:key属性。将此设置为“页脚”,就像您希望在页脚中显示的寻呼机控件一样,允许您添加额外的行。在构成视图或重复控件的表的最后一行中,我们放置计算字段。 (请注意,此示例假定在标题为“值”的列之前有7列) 2.假设我们在XPage上提供了一个组合框,允许用户过滤将在视图或重复控件中显示的文档。 使用Firebug,我们可以看到XPages为每个组件创建动态ID和名称。对于组合框,它是视图:_id1:_id2:_id94:comboBox1。 但请注意,自定义控件上的所有组件都被分配了相同的前缀“view:_id1:_id2:_id94:”到我们给组件的名称:
因此,我们可以将以下客户端Javascript代码添加到组合框的“On Change”事件中:
var fcast = 0;
var i = 0;
var id_prefix = "#{id:comboBox1}".split("comboBox1")[0];
while (dojo.byId(id_prefix+"repeat1:"+i+":inputText3")) {
var it3= dojo.byId(id_prefix+"repeat1:"+i+":inputText3").innerHTML;
it3 = it3.replace("$","").replace(/,/gi,"");
fcast = fcast + parseFloat(it3);
i++;
}
var tot = formatCurrency(fcast);
dojo.byId(id_prefix+"computedField1").innerHTML = tot;
第三行使用“#{id:comboBox1}”返回在运行时给予comboBox1字段的完整id。请注意,如果放在脚本库中,此代码不起作用。 while循环从0行(第一个)开始,并在视图/重复控件上的每一行循环,其中inputText3字段存在。 Firebug显示值被渲染为span标记,因此我们需要使用.innerHTML来获取和设置值。 需要使用replace方法删除$和逗号,因此可以累计总计。 最后,formatCurrency函数舍入到两个小数位,并使用$和逗号重新格式化total。 (这是一个自定义功能,此处未显示。) 可以为computedField2&amp;创建类似的代码。 computedField3。 因此,如果您的客户需要显示列总计的报告,或者甚至需要包含显示总计的过滤器的报告,则可以使用这些技术。 向Paul Hannan和Marie Kehoe大声疾呼,因为他们是这个解决方案的催化剂。