【问题标题】:Unable to get document page name for ... when Read Public Access documents is set设置读取公共访问文档时,无法获取...的文档页面名称
【发布时间】:2013-07-02 16:42:36
【问题描述】:

这个问题与这里的线程有关:

Unable to get document page name for

我想我已经发现了这个问题,并想知道其他人是否看到它或知道如何解决它。

问题似乎在于“读取公共访问文档”设置并使用以下 URL 访问不是公共访问的文档:

myserver/mydb.nsf/%24%24OpenDominoDocument.xsp?documentId=00547923F0A3FF1B852572DC00419CE0&action=openDocument

这是复制问题的方法。

  1. 创建一个表单。 Make certian public access is not set and $$PublicAccess is not on the form and create some documents for this form.

  2. 为表单创建一个 xpage。将表单与 xPage 关联。

  3. 为新表单创建一个视图。

  4. 使用与此文档集关联的 xPage 创建一个 xpage 视图。使用上面创建的视图。

  5. 在数据库的 ACL 中设置读取公共访问权限。

  6. 在浏览器中打开 xpage 视图。

  7. 在浏览器中打开其中一个文档。

  8. 将网址复制到剪贴板。

  9. 关闭浏览器。打开浏览器并粘贴网址。您应该在浏览器中看到无法获取文档页面名称。 (不会要求您登录,只会收到错误消息)

10 清除阅读公共访问文档,关闭浏览器,打开浏览器并粘贴网址。这次应该可以了。 (系统会提示您登录)

似乎正在发生的事情是,如果设置了公共访问,似乎如果设置了公共访问文档,Domino 假设所有内容都应该是公共访问并且只是尝试显示文档并失败。

我猜又到了 PMR 时间,但只是想把它放在那里。

【问题讨论】:

    标签: xpages


    【解决方案1】:

    如果你打开堆栈跟踪,你会看到页面转换失败,因为无法打开文档:它有一个无效的通用 id,因为不允许匿名用户看到这个文档。

    据我所知,唯一的解决方法是创建您自己的 PageTransformer 来处理异常并将用户重定向到另一个位置。

    这是一个示例类:

    package ch.hasselba.factory;
    
    import java.io.IOException;
    import com.ibm.xsp.model.domino.DominoDocumentPageTransformer;
    import com.ibm.xsp.FacesExceptionEx;
    import javax.faces.context.FacesContext;
    
    public class PageTransformer extends DominoDocumentPageTransformer {
    
        public boolean isVirtualPage(FacesContext fc, String pStr) {
            return "/$$OpenDominoDocument.xsp".equals(pStr);
        }
    
        public String transformPageName(FacesContext fc, String pStr) {
            String ret = null;
            try {
               ret = super.transformPageName( fc, pStr );
            } catch (FacesExceptionEx fex) {
                try {
                    fc.getExternalContext().redirect("http://www.google.com");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                fc.responseComplete();
            }
            return ret;
        }
    }
    

    要激活页面转换器,您必须覆盖现有的 PageTransformer 工厂。为此,您必须在 WEB_INF 文件夹中创建一个名为 com.ibm.xsp.factories.properties 的文件。

    在这个文件中你需要添加一行来激活 yot factory:

    PageTransformer=ch.hasselba.factory.PageTransformer 
    

    如果用户打开无效文档并将他重定向到 Google,这应该会获取错误。

    更多详情可以在这里找到:http://hasselba.ch/blog/?p=1028

    【讨论】:

    • 但我不想将它们重定向到谷歌。我希望他们像关闭阅读公共访问文档时一样被提示登录。
    • 因此将他们重定向到登录页面而不是 Google
    • @BruceStemplewski:随意更改上面示例代码中的 URL。您可以将用户重定向到 names.nsf,包括指向您的数据库的反向链接:example.com/names.nsf?login=1&redirectto=/log.nsf
    • 那也行不通。我们开启了标准配置。重定向参数在我们的 appscan 中显示为高,而且看起来这不会将他们带到他们之后的页面。
    • @BruceStemplewski:启用 domcfg.nsf。或者创建一个登录 XPage 并自己重定向用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2018-07-16
    • 2016-03-25
    • 2015-10-11
    • 2015-05-13
    相关资源
    最近更新 更多