Xpages 计算图像资源的URL

Xpages 计算图像资源的URL,xpages,xpages-ssjs,Xpages,Xpages Ssjs,在绑定到domDoc数据源的xpage中,我想为存储在数据源的richtext字段中的图像构建一个预览机制。设计器和服务器是V9.0.1 附加图像的名称作为数组存储在viewScope变量中,并作为源提供给repeat控件。图像控件位于repeat内部。我还在图像旁边放了一个链接控件,提供了下载文件的方法。计算出的url如下所示: /dbpath/dbfile.nsf/xsp/.ibmmodres/domino/OpenAttachment/dbpath/dbfile.nsf/docunid/r

在绑定到domDoc数据源的xpage中,我想为存储在数据源的richtext字段中的图像构建一个预览机制。设计器和服务器是V9.0.1

附加图像的名称作为数组存储在viewScope变量中,并作为源提供给repeat控件。图像控件位于repeat内部。我还在图像旁边放了一个链接控件,提供了下载文件的方法。计算出的url如下所示:

/dbpath/dbfile.nsf/xsp/.ibmmodres/domino/OpenAttachment/dbpath/dbfile.nsf/docunid/rtBodyField/filename.gif
链接的计算非常完美,但图像永远不会显示。相反,Firebug告诉我无法解析图像的源url。事实上,我看到db path部分在url的
/xsp/.ibmmodres/domino/OpenAttachment/
部分之前呈现了两次(但仅在它之后呈现了一次):

下面是我用来计算链接(使用其value属性)和图像(使用其url属性)的源url的代码:

以下是我迄今为止试图解决的奇迹:

a) 在PageLoad之前计算db路径(
facesContext…
),将其存储在viewScope中,然后在生成图像的源==>时引用viewScope,与上述结果相同

b) 使用了图像的value属性而不是url==>与上面相同的结果

c) 使用标准的html
“#{javascript:…}”
和上面相同的代码==>这很好

因此,我确实有一个解决方案(解决方案c),但我仍然想了解为什么路径元素仅在url的第一部分加倍,并且仅在图像资源中加倍

编辑:
又尝试了两件事:
d) 将图像控件拉到my repeat之外,然后将一个固定(有效)文件名添加到计算的url==>与上面相同(错误)的结果

e) 仅计算了整个url部分,但图像文件名beforePageLoad除外,并将其存储在viewScope var=>中。这是最奇怪的结果:在图像viewScope外部包含正确的路径信息,但在内部,我看到与上面相同的坏结果。因此,似乎在图像内部,viewScope变量在某些部分发生了更改


这太奇怪了,我觉得我一定犯了一个非常简单而愚蠢的错误,但那会是什么呢?

你在寻找如何解决这个问题吗?试试这个:

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;   
   }

希望有帮助

好吧,正如我担心的那样:我没有考虑到为图像控件定义的相对url会自动以
/dbpath/dbfile.nsf/
作为前缀

这就是为什么无论我如何计算自己的url,该部分总是出现两次。如果我使用绝对URL(
http://server/path/dbfile.nsf/...

因此,计算出的url必须按如下方式构建:

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

我已经用过了,不过还是谢谢你。但就在这一刻,我发现了我的方法中的错误(见上面我自己的答案)。。。
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;   
   }
var unid=context.getUrlParameter('documentId');
var p=facesContext.getExternalContext().getRequestContextPath();
return '/xsp/.ibmmodres/domino/OpenAttachment' + p + '/' + 
         unid + '/rtBodyFld/' + imgEntry;