xpages验证数据库是否存在

xpages验证数据库是否存在,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我不熟悉javascript和xpages。我正在将一个旧的notes应用程序升级到xpages。在我的xpage中,我有一个字段、一个保存按钮和一个错误消息控件。该字段用于保存用户键入的nsf路径/名称的值,以便以后使用(例如://SAS/address.nsf)。如何验证该路径/数据库是否存在?前面的lotusscript是这样的(它使用2个字段,一个用于获取服务器路径,另一个用于获取db路径。但是对于当前的xpage,要求仅使用一个字段): 在xpage的字段中,我添加了一个validat

我不熟悉javascript和xpages。我正在将一个旧的notes应用程序升级到xpages。在我的xpage中,我有一个字段、一个保存按钮和一个错误消息控件。该字段用于保存用户键入的nsf路径/名称的值,以便以后使用(例如://SAS/address.nsf)。如何验证该路径/数据库是否存在?前面的lotusscript是这样的(它使用2个字段,一个用于获取服务器路径,另一个用于获取db路径。但是对于当前的xpage,要求仅使用一个字段):

在xpage的字段中,我添加了一个validateExpression验证器。在expression属性中,我计算以下SSJ:

var dbdir:NotesDbDirectory = session.getDbDirectory(null);
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath"));
return db.isOpen();
在验证器的message属性中,我将“找不到数据库”

我经常遇到的错误是:

  • 表达式无效
  • 表达式未返回布尔值

有办法解决这个问题吗?验证程序的使用是否错误?我已经用本地数据库和其他服务器上的数据库进行了测试。似乎都不管用。我尝试过的所有数据库都具有访问权限。

您可能应该使用sessionAsSigner,以XPage的签名者身份打开数据库,而不是匿名(如果您未登录)。另外,考虑在您的数据库中添加TIG/catch来捕获错误,打开一个带有无效路径的数据库。

另外,请注意validateExpression验证器必须返回布尔值true或false。在您的例子中,如果数据库无法打开,dbdir.openDatabase()将返回null,这意味着db.isOpen()将无法工作,因为它无法对null对象进行操作

您可以考虑使用自定义验证器验证器,验证器必须返回一个错误消息(而不是布尔true或false)。


我希望这可以帮助您完成验证。

使用try/catch块尝试打开数据库。如果一切正常,只需在try块中返回true。Catch块将返回false,这将处理大多数可能的故障:错误的服务器、断开的连接、无效的路径、无法访问等等


试试{
//在此处打开数据库并触摸某些属性,例如文档计数
返回true;
}捕获(e){
返回false;//打开数据库失败
}

var dbdir:NotesDbDirectory = session.getDbDirectory(null);
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath"));
return db.isOpen();