1

此问题与此处的此线程有关:

无法获取文档页面名称

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

问题似乎出在 Read Public Access Documents 设置和使用 URL 访问非公共访问的文档,例如:

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

这是复制问题的方法。

  1. 创建一个表格。Make certian public access 未设置且 $$PublicAccess 不在表单上,​​并为此表单创建一些文档。

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

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

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

  5. 在数据库的 ACL 中设置 Read Public Access。

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

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

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

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

10 清除 Read Public Access 文档,关闭浏览器,打开浏览器并粘贴 url。这次应该可以了。(系统会提示您登录)

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

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

4

1 回答 1

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

于 2013-07-02T08:42:36.880 回答