2013-07-01 23 views
1

這個問題涉及到這個線程在這裏:無法獲取文檔頁面名稱...當閱讀公共訪問的文件設置

Unable to get document page name for

我想我已經發現了這個問題,並想知道如果別人看到它或知道如何解決它。

這個問題似乎是與讀取公用訪問文檔設置和訪問文件,是不是有一個網址,如公共訪問:

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

以下是如何複製問題。

  1. 創建一個表單。未設置公共訪問權限,並且$$ PublicAccess不在表單上,​​併爲此表單創建一些文檔。

  2. 爲表單創建一個xpage。將表單與xPage關聯。

  3. 爲新表單創建一個視圖。

  4. 創建x頁面視圖,其中xPage與此文檔集關聯。使用上面創建的視圖。

  5. 在數據庫的ACL中設置讀取公共訪問權限。

  6. 打開瀏覽器的x頁面查看頁面。

  7. 在瀏覽器中打開其中一個文檔。

  8. 將url複製到剪貼板。

  9. 關閉瀏覽器。打開瀏覽器並粘貼網址。您應該在瀏覽器中獲取無法獲取文檔頁面名稱。 (你會不會要求登錄,只得到錯誤)

10晴讀公共訪問的文件,關閉瀏覽器,打開瀏覽器,在URL粘貼。這一次它應該工作。 (您將被提示登錄)

似乎正在發生的事情是,如果設置了公共訪問權限,似乎如果設置了公共訪問權限文檔,則Domino ASSUMES應該是公開訪問權限,並且只是試圖顯示文檔並且失敗。

我想這是再次PMR時間,但只是想把它放在那裏。

回答

4

如果打開堆棧跟蹤,將看到頁面轉換失敗,因爲文檔無法打開:它具有無效的通用標識,因爲匿名用戶不被允許查看此文檔。

據我所見,唯一的解決方法是創建自己的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工廠的頁面變壓器。爲此,您必須在名稱爲com.ibm.xsp.factories.properties的WEB_INF文件夾中創建一個文件。

在這個文件中,你需要添加一行來激活仁愛堂廠:

PageTransformer=ch.hasselba.factory.PageTransformer 

此,如果用戶打開一個無效文檔和重定向他谷歌應該獲取錯誤。

更多詳細信息可以在這裏找到:http://hasselba.ch/blog/?p=1028

+0

但我不希望重定向至Google。我希望提示他們登錄,就像他們在讀取公共訪問文檔關閉時一樣。 –

+2

因此將它們重定向到登錄頁面而不是Google – RoyRumaner

+0

@BruceStemplewski:隨意更改上面示例代碼中的URL。您可以將用戶重定向到* names.nsf *,包括反向鏈接到您的數據庫:* https://example.com/names.nsf?login = 1&redirectto =/log.nsf * –