- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能看起来重复,但请先阅读,如果您有疑问,请告诉我。我有一个带有两个数据源的 xpage,一个用于信息表单,另一个用于图像附件。现在,与典型的应用程序不同,我不想将图像附加到现有的主数据源(第一个数据源),我想异步上传图像并为每个图像创建单独的文档,并将主数据源的 UNID 作为新图像文档的 subID。这就是当前数据结构的方式,我对改变它几乎没有发言权,所以这里提出了挑战。
我已经成功地能够创建 xhr 请求(借助 Julian 和 Sven 之前的各种异步 uploader 的指南)并使用我编写的自定义控件创建带有图像的新文档,但是一旦我将它嵌入到 XPage 中,有两个数据源并尝试上传和创建新文档,它会创建主数据源的副本并删除所有其他字段值(具有空字段的副本的预期行为)。我怀疑这是因为我使用了 $$submitid 和我的上传请求所需的所有表单值,并且它们以某种方式与第一个数据源绑定(bind)或共享,但我不能太确定。
我的自定义控件有自己的数据源,xpage 有一个面板,其中包含数据源。下面的自定义控件。
<小时/> <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="imgAttach" formName="mImageAttach"
concurrencyMode="force">
</xp:dominoDocument>
</xp:this.data>
<xp:inputText id="inputText2" style="width:657.0px"><xp:this.defaultValue><![CDATA[#{javascript:facesContext.getExternalContext().getRequest().getRequestURI();
context.getUrl()}]]></xp:this.defaultValue></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:inputText id="parentId" value="#{imgAttach.ParUNID}"
style="width:333.0px">
<xp:this.defaultValue><![CDATA[#{javascript:var url = context.getUrl().toString();
/*
if(url.indexOf("createComponent.xsp") > 0 && context.getUrlParameter("documentId") != ""){
var doc:NotesDocument = newComponent.getDocument();
return doc.getUniversalID();
} else {
return "";
}
*/}]]></xp:this.defaultValue>
<xp:this.rendered><![CDATA[#{javascript:var url = context.getUrl().toString();
if(url.indexOf("createComponent.xsp") > 0){
return true;
} else {
return false;
}}]]></xp:this.rendered>
</xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:inputText id="inputText1"
defaultValue="#{javascript:imgAttach.getDocument().getUniversalID()}"
style="width:333.0px; display:none;">
</xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:inputText id="Created" style="width:297.0px; display:none;"
value="#{imgAttach.Created}"
defaultValue="#{javascript:@Created()}">
<xp:this.converter>
<xp:convertDateTime type="date" dateStyle="short"></xp:convertDateTime>
</xp:this.converter>
</xp:inputText>
<xp:br></xp:br>
<xp:div styleClass="file-input">
<div class="file-preview ">
<div class="close fileinput-remove">×</div>
<div class="">
<div class="file-preview-thumbnails" id="file-thumbs">
</div>
<div class="clearfix"></div>
<div
class="file-preview-status text-center text-success">
</div>
<div class="fileinput-error file-error-message"
style="display: none;">
</div>
</div>
</div>
<div class="input-group-btn">
<button type="button" tabindex="500"
title="Clear selected files"
class="btn btn-default fileinput-remove fileinput-remove-button">
<i class="glyphicon glyphicon-trash"></i>
Remove
</button>
<button tabindex="500" id="upload-files"
title="Upload selected files"
class="btn btn-default fileinput-upload fileinput-upload-button">
<i class="glyphicon glyphicon-upload"></i>
Upload
</button>
<div tabindex="500" class="btn btn-primary btn-file"
id="files-container">
<i class="glyphicon glyphicon-folder-open"></i>
 Browse …
<input name="add-files[0]" id="add-files" type="file"
multiple="true" class="file-input">
</input>
<xp:fileUpload id="FileUploadCtrl"
value="#{imgAttach.Body}" useUploadname="true"
style="display:none">
</xp:fileUpload>
<xp:eventHandler event="onsaveDoc" submit="false"
refreshMode="norefresh" immediate="false" save="true" id="saveDoc" />
</div>
</div>
</xp:div>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:scriptBlock id="scriptBlock2" type="text/javascript">
<xp:this.value>
<![CDATA[
$(function() {
$("#files-container").delegate('input', "change", function() {
var files = !!this.files ? this.files : [];
if (!files.length || !window.FileReader){
//console.log("No file selected or no file reader suppport");
return; // no file selected, or no FileReader support
}
for(i=0; i<files.length; i++) {
if (/^image/.test( files[i].type)){ // only image file
var reader = new FileReader(); // instance of the FileReader
reader.readAsDataURL(files[i]); // read the local file
var img = document.createElement("img");
img.file = files[i];
img.name = 'no_'+ i;
img.classList.add("file-preview-image");
reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img);
$("#file-thumbs").append(img);
}
}
/*
//add new upload button
var currentInput = $('#add-files');
var nextInput = $('#files-container');
var inputsCount = $('.file-input').length;
// now we change the 'id' attribute of said element because id's should be unique
currentInput.attr('id','add-files'+inputsCount);
// and finally we hide the old element
currentInput.hide();
// now, we append a new input element with an incremented array key defined by the length of already existing input elements
nextInput.append('<input type="file" name="add-files['+inputsCount+']" id="add-files" multiple="true" class="file-input" />');
*/
});
$("#upload-files").on("click", function(e) {
e.preventDefault();
e.stopPropagation();
var all_files = [];
try {
var files = document.querySelectorAll(".file-preview-image");
for(var i = 0; i < files.length; i++) {
//
a_uploader(files[i].file, "#{id:saveDoc}", 0, 10);
}
} catch(e) {
console.log(e);
}
});
function a_uploader(file, uploadID, counter, maxSize){
try {
var formData = new FormData();
formData.append("#{id:FileUploadCtrl}", file);
formData.append("#{id:Created}", document.getElementById("#{id:Created}").value);
formData.append("$$viewid", dojo.query("input[name='$$viewid']")[0].value);
formData.append("$$xspsubmitid", uploadID);
formData.append( "view:_id1", "view:_id1");
if(document.getElementById("#{id:parentId}") != undefined ){
formData.append("#{id:parentId}", document.getElementById("#{id:parentId}").value);
}
var xhr = new XMLHttpRequest();
/* event listners */
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
var percentComplete = Math.round(e.loaded * 100 / e.total);
console.log("Uploading... " +percentComplete.toString() + "%)");
}
else {
console.log("Uploading...")
}
}, false);
xhr.addEventListener("error", function(e) {
//insert error between error div
console.log("error: " + e);
}, false);
xhr.addEventListener("abort", function() {
//insert cancelled between div
console.log("Upload cancelled");
}, false);
xhr.open("PATCH", "#{javascript:context.getUrl()}");
xhr.send(formData);
} catch (e) {
console.log("a_uploader: "+e);
}
}
function clear_inputFiles(){
try {
var files = document.querySelectorAll(".file-preview-image");
for(var i = 0; i < files.length; i++) {
}
} catch(e) {
}
}
});]]>
</xp:this.value>
</xp:scriptBlock>
<xp:this.resources>
<xp:script src="/x$.js" clientSide="true"></xp:script>
</xp:this.resources>
</xp:view>
最佳答案
我以为我已经将第一个数据源设置为忽略请求参数以及组件控件内部的数据源。在第一个数据源上将忽略请求参数设置为 true 并欺骗数据源以获取文档 ID(如果处于编辑模式)后,我就可以使用自定义控件独立于第一个/主数据源上传图像。
现在他们正在独立上传,但仍然创建了一个副本,这对我来说似乎很奇怪。如果我单击第一个数据源的保存按钮,我不会创建任何图像附件,但如果我上传图像,它会创建主文档的副本。
<小时/>编辑:我必须从 URL 中删除 editDocument 和 documentId 并指定我自己的 docId 作为参数。我猜 HTTP 引荐来源网址是这种情况下创建重复项的罪魁祸首......或者至少是页面从创建文档到保存文档的设置方式。
关于javascript - XPage ajax 文档创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32239326/
在 Xpages Upload 控件中,我可以上传带有特殊字符的照片文件。但是在 View 中,一些特殊字符变成了下划线(例如 {#[ 到 _ ),有些则不是(例如空格,+)。当使用函数attachm
我的主题中有以下内容,但我想让它独立于服务器,以便它可以无缝地从开发移动到测试再到生产。 如何泛化 http://www.devserver.com ? text/css http:
Notes 最近更好的增强功能之一是 View 的共享列。我可以设置宽度。字体、各种设置并在 View 中放置共享列。如果我需要说更改列宽,我会在一处更改它,并且它会在我的所有 View 中更改。 是
我希望创建一个 Xpage 自助注册站点,将用户注册到 Domino 姓名和地址簿上。我只是在做一个概念验证。 我将把代码放在下面,但捕获用户详细信息、将其详细信息和密码放入 NAB 中是一个相当简单
我即将启动一个新的 XPage 项目,该项目将在全局范围内使用。我有点担心,因为他们担心性能,因此正在考虑将此应用程序与负载均衡器或集群一起使用。我一直在环顾四周,发现作用域变量可能存在问题(例如,用
我一直在 Lotus Domino Designer 8.5 中开发数据库,特别是 XPage。我注意到我可以使用颜色选择器在 FORM 上包含一个字段作为颜色字段,但 XPages 中不提供相同
我有一个应用程序可以匿名访问除几个之外的所有 xpages。我需要强制用户登录这些 xpages。是使用 beforepageload 事件来检查用户登录页面并将其重定向到正确的方式还是有更好的方法?
我正在尝试将文件从文件系统流式传输到浏览器,但无法正常工作。我有一个带有 render=false 的 xpage 并且在 afterRenderResponse 上我有以下代码: XspHttpSe
我有几个关于 bluemix xpages 运行时的问题。 截至目前(2016 年 8 月)Xpages NoSQL 数据库仍处于试验阶段。这个 NoSQL 服务是否有一个 ETA 才能成为 GA?
我有一个带有 2 个数据源的 xPage。我打开页面,第一个数据源是只读的,而第二个数据源处于编辑模式。添加 ignoreRequestParms=true 似乎会导致此行为,但这是将文档保存到不同数
我正在处理应用程序,当我想在新选项卡或窗口上打开链接时卡住了。我使用的是 Lotus Notes Designer Release 8.5.2FP1。我附上了我的代码。 最佳答案
我在 OneUI 应用程序框架 v2.1 的示例之一中看到“菜单下拉”类型控件。 see here http://infolib.lotus.com/resources/oneui/2.1/docPu
我很困惑。在 oneUI 3 documentation page有一个不错的部分。它看起来像这样: 我创建了一个新的数据库并将主题设置为 3.0.2 并放入下面的代码,它看起来与我想要生成的完全不同
如何查明 Domino 服务器上运行的 XPage 扩展库版本是什么? “tell http osgi ss”列出了很多不同的版本。 最佳答案 如果您有权访问 Domino 服务器,则可以发出命令 t
在我的 XPage 中,我需要设置数据源(Domino 文档) 我尝试按如下方式进行: 我注意到的是 documentId 中的代码部分没有被执行。完全没有。这就是为什么我把
是否有一种简单的方法可以强制用户仅在 Xpages 编辑框中输入数字?除了事后验证该字段之外。我根本不希望他们能够输入数字。 最佳答案 您可以添加客户端 Javascript 处理,例如此处建议的内容
我需要将 StyleClass 添加到 xPages 中生成的表单标记。 我不知道是否可以在新主题中更改此控件,但我的应用程序中只需要一个 xPage,这是生成的代码: 我需要这个修改类,例如:
在我开始之前,之前已经有人问过这个问题,但是没有一个答案被接受,而且我无法使用提供的答案让它工作。 How to use multiple themes at the same time 我正在尝试使
我知道几年前在 XPage 中处理加密文档是不可能的。但与此同时,我们获得了 ID 库,并且 iNotes 能够处理加密文档,不是吗? 我的研究并没有给出明确的答案,XPages 引擎是否能够与 ID
我正在处理应用程序,当我想在新选项卡或窗口上打开链接时卡住了。我使用的是 Lotus Notes Designer Release 8.5.2FP1。我附上了我的代码。 最佳答案
我是一名优秀的程序员,十分优秀!