即使声明和初始化变量,xpage getComponent也始终返回null

时间:2014-04-16 20:07:06

标签: javascript xpages xpages-ssjs

我看到a few articles here尝试绑定计算字段,但我的首选解决方案; getComponent对我不起作用。我宁愿没有隐藏"真实"领域。这就是我所拥有的。计算的增值税税率百分比字段,称为VP

<xp:text escape="true" id="VP" value="#{FInvoiceDoc.VP}" style="text-align:right">
 <xp:this.converter>
  <xp:convertNumber pattern="0.00"></xp:convertNumber>
 </xp:this.converter>
</xp:text>

以下是我设置此字段值的计算之一;

XSP.getElementById("#{id:VP}").innerHTML = tmp.toFixed(2);

tmp正确计算,VP在页面上显示正确的预期值。

然后在我的querySaveDocument事件中,我执行以下操作

var VP = getComponent("VP").getValue();
FInvoiceDoc.replaceItemValue("VP",VP);

以及存储的内容是Null值。我甚至通过执行&#34;打印(VP)&#34;确认VP变量为空。设置VP变量然后检查日志后命令。我必须成为我失踪的东西。

3 个答案:

答案 0 :(得分:4)

在页面提交时,您不会将计算文本字段的值返回给服务器,因为它是只读的。

您正在寻找可以解决的问题:

  • 以读取模式显示文档的字段
  • 使用CSJS
  • 在客户端为此字段设置新值
  • 将值保存回提交
  • 上的文档字段

前两点已经解决了您的问题。

您可以通过添加输入文本字段“VPdoc”来实现第三点,该字段绑定到文档的字段“VP”并隐藏style="display:none"

<xp:inputText
    id="VPdoc"
    value="#{FInvoiceDoc.VP}"
    style="display:none">
    <xp:this.converter>
        <xp:convertNumber pattern="0.00"></xp:convertNumber>
    </xp:this.converter>
</xp:inputText>

在提交时,使用提交按钮中的以下CSJS代码将当前值(innerHTML)从计算文本字段“VP”复制到输入文本字段“VPdoc”:

<xp:this.script><![CDATA[
    XSP.getElementById("#{id:VPdoc}").value = 
                                XSP.getElementById("#{id:VP}").innerHTML
]]></xp:this.script>

这样,在客户端设置为字段“VP”的值将保存到文档中。

答案 1 :(得分:0)

您没有指定值,而是用某些html代码替换html表示。有了它,你只需打破元素和那种&#34;转换&#34;这是一个愚蠢的div(抱歉,不知道如何更好地解释)......

永远不要乱用前端:元素绑定到文档中的项目。修改该值,表示它的元素将代表更改。

并且:你不需要querysavedocument中的那些代码行来保存值...这将自动完成,这是什么绑定(元素的value属性)是...

答案 2 :(得分:0)

也许,您使用

而不是操纵innerHTML
getComponent("VP").setValue(tmp.toFixed(2));

那会有用吗?您正在设置组件的值,我认为......