Xpages setValue(';某些值';)在某些Xpage上有效,而在其他Xpage上无效
我正在设置复选框单击事件时输入字段的值。可编辑字段用于验证一组复选框。此代码在一个xpage中工作。当我尝试在其他xpage中复制此代码时,它不起作用 以下是工作代码:Xpages setValue(';某些值';)在某些Xpage上有效,而在其他Xpage上无效,xpages,xpages-extlib,xpages-ssjs,Xpages,Xpages Extlib,Xpages Ssjs,我正在设置复选框单击事件时输入字段的值。可编辑字段用于验证一组复选框。此代码在一个xpage中工作。当我尝试在其他xpage中复制此代码时,它不起作用 以下是工作代码: <xp:checkBox text="pH" id="checkBox1" value="#{document1.PH}" checkedValue="pH"> <xp:eventHandler event=
<xp:checkBox
text="pH"
id="checkBox1"
value="#{document1.PH}"
checkedValue="pH">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="routineSectionInput1"
execMode="partial">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var
checkBox1:com.ibm.xsp.component.xp.XspInputCheckbox = getComponent("checkBox1");
var routineSectionInput1:com.ibm.xsp.component.xp.XspInputText = getComponent("routineSectionInput1");
if (checkBox1.getValue()=='pH'){
routineSectionInput1.setValue('Selected');
} else {
routineSectionInput1.setValue('');
}}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xp:checkBox>
我在另一个xpage上使用了相同的字段名和相同的代码,但它不起作用。我做错了什么
最好的问候当您在涉及绑定的组件逻辑中工作时,不要跟踪组件,而是跟踪定义其值的数据。因此,您的代码应该如下所示:
<xp:checkBox text="pH" id="checkBox1"
value="#{document1.PH}" checkedValue="pH">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="routineSectionInput1"
execMode="partial">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var chkValue = document1.getItemValueString("PH");
viewScope.routineSection = (chkValue=="pH") ? "Selected" : "";
}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xp:checkBox>
<xp:text id="routineSectionInput1" value="#{viewScope.routineSection}"></xp:text>
希望这有助于当您处理涉及绑定的组件逻辑时,不要跟踪组件,而是跟踪定义其值的数据。因此,您的代码应该如下所示:
<xp:checkBox text="pH" id="checkBox1"
value="#{document1.PH}" checkedValue="pH">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="routineSectionInput1"
execMode="partial">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var chkValue = document1.getItemValueString("PH");
viewScope.routineSection = (chkValue=="pH") ? "Selected" : "";
}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>
</xp:checkBox>
<xp:text id="routineSectionInput1" value="#{viewScope.routineSection}"></xp:text>
希望这有帮助如果存在验证错误或组件具有错误数据类型的数据(例如,无法在绑定到数字字段的组件中解析为数字的文本,因此转换错误),则任何SSJ都将失败 我建议在SSJS的开头添加一个print语句来检查它是否正在启动。(如果您对XPages更有信心,请使用PhaseListener检查是否触发了正确的相位) 此外,值得添加一个显示错误控件,以捕获在部分刷新期间捕获的任何验证错误,确保其位于刷新区域内(否则错误将不会显示在浏览器中) “未经验证的过程数据”选项在此处可能有用,如果您想跳过验证。请注意,转换错误仍然会阻止SSJS运行
正如Stephan所说,如果可能,使用数据源而不是组件。数据源将在SSJS触发之前更新。如果存在验证错误或组件的数据类型错误(例如,无法在绑定到数字字段的组件中将文本解析为数字,因此转换错误),则任何SSJS都将失败 我建议在SSJS的开头添加一个print语句来检查它是否正在启动。(如果您对XPages更有信心,请使用PhaseListener检查是否触发了正确的相位) 此外,值得添加一个显示错误控件,以捕获在部分刷新期间捕获的任何验证错误,确保其位于刷新区域内(否则错误将不会显示在浏览器中) “未经验证的过程数据”选项在此处可能有用,如果您想跳过验证。请注意,转换错误仍然会阻止SSJS运行
正如Stephan所说,如果可能,使用数据源而不是组件。数据源将在SSJS启动之前更新。删除复选框,用-c压缩数据库,并用相同的代码重新添加这些复选框。它现在正在工作。删除复选框,用-c压缩数据库,并用相同的代码重新添加这些复选框。它正在工作。谢谢。我在现有文档上尝试了该代码,但它不允许我将文档置于编辑模式。对于新文档,该值不会更改。再次感谢。莫汉:这听起来不像是一个相关的问题。如果您无法将文档置于编辑模式,则必须检查您的访问权限(或数据库完整性),谢谢。我在现有文档上尝试了该代码,但它不允许我将文档置于编辑模式。对于新文档,该值不会更改。再次感谢。莫汉:这听起来不像是一个相关的问题。如果您不能将文档置于编辑模式,则必须检查您的访问权限(或数据库完整性)。我正在使用此代码验证一个部分,它在xpage上的工作非常完美,但当复制到另一个xpage时,它会崩溃。我想知道它为什么断了。另外,在另一个xpage中重新设计工作代码也是正确的。在某个地方工作代码!=您应该保留好的代码(可能是,但不一定是),请按照以下步骤找出它崩溃的原因。一种可能的情况是,如果您的原始页面没有验证,但此页面有。我正在使用此代码验证一个部分,它在xpage上的工作非常完美,但当复制到另一个xpage时,它正在崩溃。我想知道它为什么断了。另外,在另一个xpage中重新设计工作代码也是正确的。在某个地方工作代码!=您应该保留好的代码(可能是,但不一定是),请按照以下步骤找出它崩溃的原因。一种可能的情况是,如果您的原始页面没有验证,但此页面有验证。