我有一对字段(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 not-my-code的东西),它说我需要重新提交文档,然后陷入循环,我不断得到我的警报错误消息。我必须杀死IE。
如果我关闭了调试器,则此循环不会发生。
答案 0 :(得分:1)
你需要改变你的方法。删除尝试隐藏OnLoad事件中的字段的代码。 我假设你没有使用render属性(它不会首先发送字段),因为你需要在某些计算中使用它。
转到该字段的所有属性面板,找到样式属性并输入计算可见性或显示属性的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>
希望有所帮助