Validation 无法关闭带有客户端验证的XPages上的xe:对话框

Validation 无法关闭带有客户端验证的XPages上的xe:对话框,validation,dojo,dialog,xpages,Validation,Dojo,Dialog,Xpages,我有一个xe:对话框,其中包括Dojo表单控件,用于输入多个值并在保存时创建新文档。所有值都是必需的,我可以使用xe:djValidationTextBox、xe:djTimeTextBox、xe:djComboBox和其他组合来输入值并执行客户端验证 以下是其中一个输入控件的示例: <xe:djValidationTextBox id="djValidationTextBox2" value="#{d

我有一个xe:对话框,其中包括Dojo表单控件,用于输入多个值并在保存时创建新文档。所有值都是必需的,我可以使用xe:djValidationTextBox、xe:djTimeTextBox、xe:djComboBox和其他组合来输入值并执行客户端验证

以下是其中一个输入控件的示例:

                    <xe:djValidationTextBox
                        id="djValidationTextBox2" value="#{document3.ChemTo}"
                        required="true" invalidMessage="Must enter the To change number"
                        promptMessage="Enter the To change number">
                        <xe:this.converter>
                            <xp:convertNumber type="number"></xp:convertNumber>
                        </xe:this.converter>
                    </xe:djValidationTextBox>

保存按钮在所有验证通过后创建新文档非常有效

<xp:button value="Save" id="button7">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.action>
                        <xp:actionGroup>
                            <xp:saveDocument var="document3">
                            </xp:saveDocument>
                            <xp:executeScript>
                                <xp:this.script><![CDATA[#{javascript:var c =  `enter code here`getComponent("dialog1");
 c.hide("panelChemLog");}]]></xp:this.script>
                            </xp:executeScript>
                        </xp:actionGroup>
                    </xp:this.action>
                </xp:eventHandler>
            </xp:button>

问题在于“取消”按钮。当我单击Cancel按钮时,仍然会得到所有必需的Dojo输入控件的客户端验证消息,但没有值。我可以通过单击对话框右上角的大“X”成功取消对话框,但无法使用下面两个取消按钮的服务器端或客户端代码关闭对话框

   <xp:button value="Cancel CS" id="cancelButton">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.script><![CDATA[XSP.closeDialog("#{id:dialog1 }" );]]>
          </xp:this.script>
                </xp:eventHandler>
    </xp:button>

            <xp:button value="Cancel SS" id="cancel2Button">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.action><![CDATA[#{javascript:var c =       
                                                   getComponent("dialog1");
                                  c.hide();}]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>

如何对按钮进行编码以关闭对话框并绕过客户端验证?

对于第二个按钮(服务器端),可以通过
immediate=“true”
属性禁用验证

<xp:button
    value="Cancel SS"
    id="cancel2Button">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="complete" immediate="true">
    <xp:this.action><![CDATA[#{javascript:
  var c = getComponent("dialog1");
  c.hide();}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

对于客户端来说,这很有趣。如果以dojo方式隐藏对话框,它将正常关闭。我认为这是因为
XSP.closeDialog()
方法。此函数使用
setTimeout()
处理与部分刷新相关的问题,dojo组件将在此时取消提交

所以,只需使用
dijit.byId(“#{id:dialog1}”).hide()
而不是客户端的XSP函数。

对于第二个按钮(服务器端),可以通过
immediate=“true”
属性禁用验证

<xp:button
    value="Cancel SS"
    id="cancel2Button">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="complete" immediate="true">
    <xp:this.action><![CDATA[#{javascript:
  var c = getComponent("dialog1");
  c.hide();}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

对于客户端来说,这很有趣。如果以dojo方式隐藏对话框,它将正常关闭。我认为这是因为
XSP.closeDialog()
方法。此函数使用
setTimeout()
处理与部分刷新相关的问题,dojo组件将在此时取消提交


所以,只需使用
dijit.byId(“#{id:dialog1}”).hide()而不是客户端上的XSP函数。

完成onClick事件刷新后关闭对话框。
将XSP.closeDialog(“#{id:idName}”)放在EventHandler的onComplete事件中


完成onClick事件刷新后关闭对话框。
将XSP.closeDialog(“#{id:idName}”)放在EventHandler的onComplete事件中



My advice:为close按钮定制代码,设置CS validator中使用的特定标志(隐藏编辑,JS变量)以跳过验证…我的建议:为close按钮定制代码,设置CS validator中使用的特定标志(隐藏编辑,JS变量)以跳过验证…感谢Serder,这样做了。。。这也是显而易见的。不过,这是一个局部解决方案。我已经详细研究了它,但找不到在客户端禁用dojo验证的简单方法。如果我能找到它,我将进行更新。:)就在那里。我已经更新了客户端的答案:)谢谢Serder,完成了。。。这也是显而易见的。不过,这是一个局部解决方案。我已经详细研究了它,但找不到在客户端禁用dojo验证的简单方法。如果我能找到它,我将进行更新。:)就在那里。我已经更新了客户端的答案:)