1

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

return false;

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

保存文档的代码是:

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

这与下面克努特的回答相同。我在 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;
    }
}

The dialog box is shown correctly when choice == false but the XPage is saved nonetheless.

我通过将验证移至 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 中工作。

4

1 回答 1

1

return false;是正确的。

也许,事件querySaveDocument 根本没有被执行。例如,如果您将文档保存在 SSJS 中,就会发生这种情况document1.save()

你必须有一个保存动作,比如

  <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>
于 2013-10-18T17:05:56.617 回答