【问题标题】:xpages validate database existxpages 验证数据库是否存在
【发布时间】:2012-05-30 00:30:44
【问题描述】:

我是这里的 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();

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

我不断收到的错误是:

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

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

【问题讨论】:

    标签: xpages xpages-ssjs


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用 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
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        相关资源
        最近更新 更多