即使声明并初始化了变量,xpagegetComponent也总是返回null

xpage getComponent always returns null even when variable is declared and initialized

本文关键字:xpagegetComponent null 返回 变量 声明 初始化      更新时间:2023-09-26

我在这里看到了一些文章,试图绑定计算字段,但这是我的首选解决方案;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值。我甚至通过在设置VP变量后执行"打印(VP)"命令,然后检查日志,确认了VP变量为空。一定有什么东西我错过了。

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

你正在寻找一个可以的解决方案:

  • 在读取模式下显示文档的字段
  • 使用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"的值就会保存到文档中。

您不赋值,而是用一些html代码替换html表示。这样,您只需打断元素并将其"转换"为一个愚蠢的div(对不起,不知道如何更好地解释)。。。

永远不要乱处理前端:元素绑定到文档中的某个项。修改该值,表示该值的元素将表示更改。

并且:您不需要querysavedocument中的那几行代码来保存回值。。。这将自动完成,这就是绑定(元素的值属性)的作用。。。

也许,您没有操作innerHTML,而是使用

getComponent("VP").setValue(tmp.toFixed(2));

这样行吗?我认为,你应该设置组件的值。。。。。

相关文章:
  • 没有找到相关文章