2014-02-13 21 views
0

在我綁定到domDoc數據源的xpage中,我想爲存儲在數據源的richtext字段中的圖像構建預覽機制。設計者和服務器是V 9.0.1。計算圖像資源的URL

附加圖像的名稱作爲數組存儲在viewScope var中,並作爲源重複控制。圖像控件位於重複內部。我還將鏈接控件放置在提供下載文件的方式的圖像旁邊。計算得到的url如下所示:

/dbpath/dbfile.nsf/xsp/.ibmmodres/domino/OpenAttachment/dbpath/dbfile.nsf/docunid/rtBodyField/filename.gif 

鏈接的計算工作完美,但圖像從不顯示。相反,Firebug告訴我,圖片的源網址無法解析。而事實上,我看到數據庫路徑部分已呈現的URL的兩倍之前/xsp/.ibmmodres/domino/OpenAttachment/部分(但只有一次吧!):

/dbpath/dbfile.nsf/dbpath/dbfile.nsf/xsp/.ibmmodres/domino/OpenAttachment/dbpath/dbfile.nsf/docunid/rtBodyField/filename.gif 

下面是我使用來計算代碼兩個鏈接(使用它的價值屬性)和圖像源的URL(使用其url屬性):

var unid=context.getUrlParameter('documentId'); 
var p=facesContext.getExternalContext().getRequestContextPath(); 
return p+'/xsp/.ibmmodres/domino/OpenAttachment'+p+'/'+unid + '/rtBodyFld/'+imgEntry; 

這裏是我試過到目前爲止解決奇蹟:

)計算分貝路徑(facesContext...)beforePageLoad,其存儲在viewScope,然後引用viewScope當構建圖像的源==>相同的結果如上述

b)中所使用的圖像的屬性,而不是url ==>與上面相同的結果

c)使用標準html <img />標籤,其中src參數是使用"#{javascript:...}"構建的,代碼如上==>此工作正常!

因此,我有解決方案下的解決方法),但我仍想了解爲什麼路徑元素加倍只在URL的第一部分圖像資源。

編輯:
試圖兩兩件事:
d)拉出所述圖像控制外我重複,然後加入固定(和有效)的文件名,以所計算出的URL ==>相同(壞)導致如上

e)只計算整個url部分,除了圖像文件名beforePageLoad並將其保存在viewScope var ==>這是最奇怪的結果:在圖像的外部觀看範圍包含正確的路徑信息,但在裏面我看到了同樣的壞結果如上。所以看起來,在圖像內的viewScope變量部分改變?

這太奇怪了,我覺得我必須在這裏做出一個非常簡單和愚蠢的錯誤,但那會是什麼?

回答

0

正常的,這是因爲我擔心:我沒有考慮到用於圖像控制限定的相對URL/dbpath/dbfile.nsf/自動前綴

這就是爲什麼該部分總是出現兩次,無論我如何計算自己的網址。

var unid=context.getUrlParameter('documentId'); 
var p=facesContext.getExternalContext().getRequestContextPath(); 
return '/xsp/.ibmmodres/domino/OpenAttachment' + p + '/' + 
     unid + '/rtBodyFld/' + imgEntry; 
1

您是否在尋找如何calculate attachment URLs?試試這個:

function getAttachmentURL(docID:java.lang.String, attachmentName:java.lang.String) { 
    var base = getBaseURL(); 
    var middle = "/xsp/.ibmmodres/domino/OpenAttachment"; 
    if (base.substr(0,4) == "/xsp") { 
     middle += base.substr(4); 
    } else { 
     middle += base; 
    } 
    var result = base + middle + "/" + docID + "/$File/" + attachmentName + "?Open"; 
    return result; 
} 

function getBaseURL() { 
    var curURL = context.getUrl(); 
    var curAdr = curURL.getAddress(); 
    var rel = curURL.getSiteRelativeAddress(context); 
    var step1 = curAdr.substr(0,curAdr.indexOf(rel)); 

    // Now cut off the http 
    var step2 = step1.substr(step1.indexOf("//")+2); 
    var result = step2.substr(step2.indexOf("/")); 
    return result; 
    } 

希望有幫助!

+0

我已經使用了了,但感謝反正:如果我用了絕對URLhttp://server/path/dbfile.nsf/...

因此,而不是計算的網址有這樣的待建它會工作。但是我只是在這一刻發現了我的方法中的錯誤(請參閱上面的我自己的答案)... –