我有一对字段(BillingServicesDD和BillingServicesFF)。应该显示一个或另一个,具体取决于“ SpreadSheet”字段的值。在我的onClientLoad事件中,执行以下操作;
// Set up field hide-when on loading.
spreadSheetVis();
.
(other cool, but unrelated code)
.
}
我的spreadSheetVis()例程如下。
// set the visibility of our billingservices selection depending on what we
// selected in the spreadsheet value.
function spreadSheetVis() {
var em = XSP.getElementById("#{id:editMode}");
if ( em == undefined ) {
var ss = XSP.getElementById("#{id:SpreadSheetDsp}").innerHTML;
} else {
var ss = XSP.getElementById("#{id:Spreadsheet}").value;
};
if ( ss === "Compliance") {
XSP.getElementById("#{id:BillingServicesDD}").style.display = "inline";
XSP.getElementById("#{id:BillingServicesFF}").style.display = "none";
} else {
XSP.getElementById("#{id:BillingServicesDD}").style.display = "none";
XSP.getElementById("#{id:BillingServicesFF}").style.display = "inline";
};
}
SpreadSheet和BillingServicesDD都是组合框。 SpreadSheetDSP和BillingServicesFF都是inputTexts。 SpreadSheet和SpreadSheetDSP都指向FInvoiceDoc.Spreadsheet。我使用此方法而不是可见/渲染方法,因为我需要表单上的所有这些值可用于表单的其他部分。我只是不想显示选定的对象,甚至不希望看到他们时就占用房地产。
在大多数情况下,这非常有效。我的问题是,保存表单时如果出现某种验证错误,那么BillingServicesDD和FF都将显示。如果表单上的错误消息字段由我编写的服务器端验证例程设置,则稍后将在带有警告语句的onClientLoad事件中发生验证错误消息。
在onClientLoad事件和警报消息中,该字段显示始终是正确的(这是onClientLoad事件中发生的最后一件事情)。此后的某个时候,似乎再次显示该文档时,两个字段都出现了。 (顺便说一句,此重新显示似乎不再通过onClientLoad事件进行。)
由于这都是客户端代码,因此我将通过IE的调试器运行它。那里发生了一些奇怪的事情。所有代码都按预期运行,但是当我逐步执行所有步骤(甚至遍历所有bizzar不是我的代码的东西)时,它说我需要重新提交文档,然后陷入循环中,不断获取我的文档警报错误消息。那我要杀了IE。
如果我关闭了调试器,则不会发生此循环。
最佳答案
您需要更改方法。删除试图隐藏OnLoad事件中的字段的代码。
我假设您没有使用rendered属性(首先不会发送该字段),因为在某些计算中您需要它。
转到该字段的所有属性面板,找到样式属性,然后输入一个计算可见性或显示属性的SSJS表达式。
将计算结果放在那里,将不会有任何刷新。
一个样品:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:checkBox text="Control on" id="editMode"
value="#{viewScope.editMode}" checkedValue="true"
uncheckedValue="false" defaultChecked="true">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="SpreadSheetDsp">
</xp:eventHandler>
</xp:checkBox>
<xp:table style="width:100.0%" id="SpreadSheetDsp">
<xp:tr style="background-color : #FFBBBB">
<xp:this.rendered><![CDATA[#{javascript:"false" != viewScope.editMode;}]]></xp:this.rendered>
<xp:td>Visible</xp:td>
<xp:td>when checked</xp:td>
</xp:tr>
<xp:tr style="background-color : #BBBBFF">
<xp:this.rendered><![CDATA[#{javascript:"false" == viewScope.editMode;}]]></xp:this.rendered>
<xp:td>Visible</xp:td>
<xp:td>when unchecked</xp:td>
</xp:tr>
</xp:table>
</xp:view>
希望能有所帮助