我有一个xe:对话框,其中包含Dojo Form控件,用于输入多个值并在保存时创建新文档。所有值都是必需的,我使用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>
问题出在“取消”按钮上。当我单击“取消”按钮时,我仍然获得所有必需的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>
如何编写按钮以关闭对话框并绕过客户端验证?
答案 0 :(得分:3)
对于第二个按钮(服务器端),您可以通过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-way隐藏对话框,它会正常关闭。我认为这是因为XSP.closeDialog()
方法。此函数使用setTimeout()
进行部分刷新相关问题,dojo组件在此时取消提交。
因此,只需在客户端使用dijit.byId("#{id:dialog1}").hide();
而不是XSP函数。
答案 1 :(得分:1)
完成onClick事件刷新后关闭对话框 将XSP.closeDialog(&#34;#{id:idName}&#34;)放入EventHandler的onComplete事件中
&lt; xp:this.action&gt;&lt;![CDATA [#{javascript:var c = getComponent(&#34; dialog1&#34;); c.hide();}]]&gt; &LT; / XP:this.action&GT; 击>
<xp:button value="Cancel SS" id="cancel2Button">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="true">
<xp:this.onComplete><![CDATA[XSP.closeDialog("#{id:"dialog1"}")]]></xp:this.onComplete>
</xp:eventHandler>
</xp:button>