我在getCoonent在确认对话框中返回null的编码错误是什么?

时间:2014-09-11 15:15:22

标签: xpages

在我的汇率XPage上,我希望能够使用简单的操作确认用户输入的值。使用getComponent,我能够获得localCurrency(combobox)和effectiveDate(inputText即日期)的句柄。然后,这些值可以在确认对话框中轻松显示。但是,exchangeRate始终返回null。

这里是exchangeRate inputText:

<xp:inputText style="width:75.0px;text-align:right;" id="exchangeRate"
    value="#{exchangeRateDoc.exchangeRate}"
    readonly="#{javascript:!exchangeRateDoc.isEditable();}"
    disabled="#{javascript:!@IsNewDoc();}">
    <xp:this.converter>
        <xp:convertNumber type="number"></xp:convertNumber>
    </xp:this.converter>
</xp:inputText>

...这里是确认,它会带来localCurrency和effectiveDate值而没有问题,但总是将exchangeRate报告为null。

<xp:confirm>
    <xp:this.message><![CDATA[#{javascript:var baseText = "Are you sure that you want to set the exchange rate for ";
var effectiveDate = getComponent("effectiveDate").getValue().toString();
var localCurrency = getComponent("localCurrency").getValue();
var exchangeRate = getComponent("exchangeRate").getValue();
return baseText + localCurrency + " to " + exchangeRate + " as of " + effectiveDate + "?"; }]]></xp:this.message>
</xp:confirm>

我的代码在哪里出错,它无法获取该inputText的值?

2 个答案:

答案 0 :(得分:2)

localCurrency和effectiveDate是否选取在浏览器中输入的值,或上次将该区域刷新到浏览器时定义的值?

您正在计算SSJS以传递给CSJS confirm()消息。我希望它能够在上次刷新时显示值,而不是用户刚刚输入的值。如果您想要最新的值,我认为您需要通过CSJS访问它们。

答案 1 :(得分:0)

这是客户端与服务器端混淆的典型错误。用户在客户端输入的值在服务器端无法访问,直到服务器端为止。由于在服务器端操作上可以使用确认简单操作,因此在使用时只能访问服务器端值。

然而,正如Paul所指出的那样,window.confirm方法在客户端可用,并且可以轻松地在那里进行确认,访问客户端值。

此功能代码为:

   <xp:eventHandler event="onclick" submit="true" refreshMode="complete"
        immediate="false" save="true" id="eventHandler3">
        <xp:this.script><![CDATA[var baseText = "Are you sure that you want to set the exchange rate for ";
    var effectiveDate = document.getElementById("#{id:effectiveDate}").value;
    var localCurrency = document.getElementById("#{id:localCurrency}").value;
    var exchangeRate = document.getElementById("#{id:exchangeRate}").value;
    return window.confirm (baseText + localCurrency + " to " + exchangeRate + " as of " + effectiveDate + "?");]]></xp:this.script>
        <xp:this.action><![CDATA[#{javascript:exchangeRateDoc.save();
    context.redirectToPage("/pro_exchangeRate_view.xsp")}]]></xp:this.action>
   </xp:eventHandler>

非常感谢保罗指出我的错误!

编辑:确保客户端脚本返回值。在我的这个脚本的初始版本中,它只有window.confirm命令,该命令为用户提供了对话框,但它无视响应并执行服务器端命令!糟糕!