在绑定到domDoc数据源的xpage中,我想为存储在数据源的richtext字段中的图像构建预览机制。 Designer和服务器是V 9.0.1。
附加图像的名称作为数组存储在viewScope var中,并作为源提供给重复控件。图像控件位于重复内部。我还在图像旁边放置了一个链接控件,提供了下载文件的方法。计算出的网址如下所示:
/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
这是我用来计算链接(使用其value属性)和图像(使用其url属性)的源URL的代码:
var unid=context.getUrlParameter('documentId');
var p=facesContext.getExternalContext().getRequestContextPath();
return p+'/xsp/.ibmmodres/domino/OpenAttachment'+p+'/'+unid + '/rtBodyFld/'+imgEntry;
这是我迄今为止尝试解决这个奇迹的原因:
a)在PageLoad之前计算数据库路径(facesContext...
),将其存储在viewScope中,然后在构建图像的源时引用viewScope ==>与上述结果相同
b)使用图像的值属性而不是 url ==>与上述结果相同
c)使用标准的html<img />
标记,其中src参数使用"#{javascript:...}"
构建,其代码与上述相同==&gt;这很好用!
所以我确实有解决方案c)的解决方法,但我仍然想知道为什么路径元素在网址的第一部分中只加倍 ,而仅< / em>用于图像资源。
修改
尝试了两件事:
d)将图像控件拉到我的重复之外,然后将固定(和有效)的文件名添加到计算的url ==&gt;与上述相同(差)的结果
e)仅计算整个网址部分,除了图像文件名之前的PageLoad并存储在viewScope var ==&gt;中。这是最奇怪的结果:在图像外面,viewcope包含正确的路径信息,但在内部我看到的结果与上面相同。因此,在图像内部,viewScope变量似乎在部分???
中被改变这太奇怪了,我觉得我一定在这里犯了一个非常简单和愚蠢的错误,但那会是什么呢?
答案 0 :(得分: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;
}
希望有所帮助!
答案 1 :(得分:0)
好吧,就像我担心的那样:我没有考虑到为图像控件定义的相对网址是自动带有/dbpath/dbfile.nsf/
前缀。
这就是为什么无论我如何计算自己的网址,该部分总是出现两次。如果我使用绝对网址(http://server/path/dbfile.nsf/...
)
因此,计算的网址必须像这样构建:
var unid=context.getUrlParameter('documentId');
var p=facesContext.getExternalContext().getRequestContextPath();
return '/xsp/.ibmmodres/domino/OpenAttachment' + p + '/' +
unid + '/rtBodyFld/' + imgEntry;