无法通过客户端验证关闭XPage上的xe:dialog

时间:2014-07-23 13:49:11

标签: validation dojo dialog xpages

我有一个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>

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

2 个答案:

答案 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>