我是javascript和xpages的新手。我正在升级到Xpages的旧注释应用程序。在我的XPage中,我有一个字段,保存按钮和错误消息控制。该字段用于保存稍后使用的用户键入的NSF路径/名称的值(例如://sas/address.nsf)。如果存在该路径/数据库,我如何验证?以前的Lotusscript是这样的(它使用2个字段,一个来获取服务器路径,另一个用于获取DB路径。但对于当前XPage,要求是仅使用一个字段):

svr$= source.FieldGetText("ServerPath")
dbsvr$= source.FieldGetText("DBPath")
Dim db1 As New NotesDatabase(svr$ , dbsvr$)

If Not db1.IsOpen  Then
Messagebox "Cannot find the database."
Call source.GotoField("DBPath")
continue = False
Exit Sub
End If
.

在XPage中的字段中,我添加了一个验证表达验证程序。在表达式属性中,我计算以下SSJS:

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

在验证器的消息属性中,我放出“找不到数据库”。

我继续的错误是:

  • 表达无效。
  • 表达式没有返回布尔值。

以解决这个问题的任何方式?是错误使用验证器吗?我已经在其他服务器上使用本地数据库和数据库进行了测试。没有似乎工作。所有这些数据库我都尝试过他们访问权限。

有帮助吗?

解决方案

您应该使用sessionassigner以将数据库打开作为Xpage的签名者 - 而不是作为匿名(如果您未登录)。此外,考虑在DBDIR.Opendatabase()周围添加尝试/捕获,以捕获使用无效路径打开数据库的错误。

此外,请注意,ValidateExpression Validator必须返回Boolean True或False。在您的情况下,DBDIR.Opendatabase()如果无法打开数据库,则返回null - 这意味着db.isopen()将无法工作,因为它无法在空对象上运行。

您可以考虑使用CustomValidator validator,该验证器必须返回错误消息(而不是Boolean True或False)。

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

其他提示

使用try / catch块来尝试打开数据库。如果一切正常,请在TRY块中返回TRUE。Catch Block将返回False,将处理大部分可能的失败:错误的服务器,断开连接,无效路径,无访问等。

try {
// open database here and touch some property, doc count, for example
return true;
} catch (e) {
return false; // failed to open database
}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top