Xpages setValue(';某些值';)在某些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=

我正在设置复选框单击事件时输入字段的值。可编辑字段用于验证一组复选框。此代码在一个xpage中工作。当我尝试在其他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  
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中重新设计工作代码也是正确的。在某个地方工作代码!=您应该保留好的代码(可能是,但不一定是),请按照以下步骤找出它崩溃的原因。一种可能的情况是,如果您的原始页面没有验证,但此页面有验证。