XPages - querysavedocument事件

时间:2013-10-18 16:37:32

标签: xpages xpages-ssjs

我第一次使用XPages querysavedocument事件,并试图阻止XPage被保存。我试过了

return false;

但这并不能阻止文档被保存。阻止XPage保存的正确语法是什么?

保存文档的代码是:

<xp:this.action>
<xp:saveDocument var="document1"></xp:saveDocument>
</xp:this.action>

这与Knut的答案如下。我在querySaveDocument中的代码是

var choice:boolean = false;

for (var k = 1; k < 7; k++) {
    choice = false;
    sectionname = "C1B"+k;
    for (var n = 1; n < 7; n++) {
        fieldname = "C1B"+k+"_R"+n;

        if (getComponent(fieldname).getValue() != ""){
            choice = true; 
            break;};
    }

    if (choice == false){
        viewScope.put("EmptyRadioField",sectionname);
        var comp = getComponent("RadioButtonValidationDialog");
        comp.show();
        return false;
    }
}

当选择== false时,对话框会正确显示,但仍会保存XPage。

我通过将验证移到csjs来解决了我的问题:

for (var k = 1; k < 7; k++) {

choice = false;
sectionname = "C1B"+k;

for (var n = 1; n < 7; n++) {
fieldname = "C1B"+k+"_R"+n;

var id = "view:_id1:_id2:_id3:"+fieldname;
fieldvalue = dijit.byId(id).getValue();

if (fieldvalue != false){
choice = true; 
break;};

}

if (choice == false){

sectionid = "view:_id1:_id2:_id3:lbl"+sectionname;
sectionvalue = dojo.byId(sectionid).innerHTML;
alert("Please enter a value for " + sectionvalue);
return false;

}
}   

这很有效,尽管经过多次尝试,但我无法让它在SSJS中运行。

1 个答案:

答案 0 :(得分:1)

return false;是对的。

可能,事件querySaveDocument 根本没有执行。这发生在例如如果您使用document1.save()将文档保存在SSJS中。

您必须执行类似

的保存操作
  <xp:this.action>
     <xp:saveDocument var="document1"></xp:saveDocument>
  </xp:this.action>

或使用

<xp:eventHandler
    event="onclick"
    submit="true"
    refreshMode="complete"
    immediate="false"
    save="true">
</xp:eventHandler>