此问题与此主题相关:
Unable to get document page name for
我想我已经发现了这个问题,并想知道其他人是否正在看到它或知道如何解决它。
问题似乎与“阅读公共访问文档”设置有关,并使用以下网址访问非公共访问权限的文档:
MYSERVER / mydb.nsf /%24%24OpenDominoDocument.xsp documentId = 00547923F0A3FF1B852572DC00419CE0&安培;行动=使用openDocument
以下是如何复制问题。
创建表单。未设置certian公共访问权限且表单上没有$$ PublicAccess并为此表单创建一些文档。
为表单创建一个xpage。将表单与xPage相关联。
为新表单创建一个视图。
使用与此文档集关联的xPage创建xpage视图。使用上面创建的视图。
在数据库的ACL中设置读取公共访问权限。
在浏览器中打开xpage视图。
在浏览器中打开其中一个文档。
将网址复制到剪贴板。
关闭浏览器。打开浏览器并粘贴到网址中。您应该在浏览器中获取无法获取文档页面名称。 (您不会被要求登录,只是得到错误)
10清除阅读公共访问文档,关闭浏览器,打开浏览器并粘贴网址。这次它应该工作。 (系统将提示您登录)
似乎正在发生的事情是,如果设置了公共访问,似乎设置了公共访问文档,Domino ASSUMES everyhting应该是公共访问,只是尝试显示文档并失败。
我猜它再次是PMR时间,但只是想把它放在那里。
答案 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