Validation 无法关闭带有客户端验证的XPages上的xe:对话框
我有一个xe:对话框,其中包括Dojo表单控件,用于输入多个值并在保存时创建新文档。所有值都是必需的,我可以使用xe:djValidationTextBox、xe:djTimeTextBox、xe:djComboBox和其他组合来输入值并执行客户端验证 以下是其中一个输入控件的示例: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: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验证的简单方法。如果我能找到它,我将进行更新。:)就在那里。我已经更新了客户端的答案:)