0

我是 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 的字段中,我添加了一个 validateExpression 验证器。在表达式属性中,我计算以下 SSJS:

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

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

我不断收到的错误是:

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

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

4

2 回答 2

1

您可能应该使用 sessionAsSigner 来打开数据库作为 XPage 的签名者 - 而不是匿名(如果您没有登录)。此外,考虑在 dbdir.OpenDatabase() 周围添加 try/catch 以捕获打开具有无效路径的数据库的错误。

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

您可以考虑使用必须返回错误消息(而不是布尔值 true 或 false)的 customValidator 验证器。

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

于 2012-05-22T06:50:12.120 回答
0

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

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

于 2012-05-22T07:18:23.323 回答