设置“读取公共访问”文档时,无法获取...的文档页面名称

时间:2013-07-01 17:01:56

标签: xpages

此问题与此主题相关:

Unable to get document page name for

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

问题似乎与“阅读公共访问文档”设置有关,并使用以下网址访问非公共访问权限的文档:

MYSERVER / mydb.nsf /%24%24OpenDominoDocument.xsp documentId = 00547923F0A3FF1B852572DC00419CE0&安培;行动=使用openDocument

以下是如何复制问题。

  1. 创建表单。未设置certian公共访问权限且表单上没有$$ PublicAccess并为此表单创建一些文档。

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

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

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

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

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

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

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

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

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

    似乎正在发生的事情是,如果设置了公共访问,似乎设置了公共访问文档,Domino ASSUMES everyhting应该是公共访问,只是尝试显示文档并失败。

    我猜它再次是PMR时间,但只是想把它放在那里。

1 个答案:

答案 0 :(得分:4)

如果打开堆栈跟踪,您将看到页面转换失败,因为文档无法打开:它具有无效的通用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