我了解如何使用表达式语言将XPages控件绑定到Java Bean.然后它会自动访问setter和getter.
但是你如何处理文件附件?
那是什么样的?我希望能够将文件上传控件绑定到bean.将附件保存到"无论"文档中......无论是当前文档还是外部文档...... bean应该能够处理该逻辑.
我想我不知道如何将该文件附件放入内存bean中,以便能够像保存到文档那样对其进行任何操作.
任何意见,将不胜感激.
更新:这是一个类似的问题: 如何使用xPages上传控件将上传的文件存储到本地文件系统?
但在该问题中,用户想要保存到本地光盘.我想保存到文档中.
谢谢!
我有这个代码:
<xe:formTable id="formTable1" formTitle="User Roles">
<xe:formRow id="formRow1" label="Category Admin">
<xe:djextNameTextBox id="edtCatAdmin" multipleSeparator="," value="#{exhibitorInfo.categoryAdmin}" />
<xe:namePicker id="namePicker1" for="edtCatAdmin">
<xe:this.dataProvider>
<xe:namePickerAggregator>
<xe:this.dataProviders>
<xe:dominoNABNamePicker addressBookSel="first" groups="false" people="true" />
<xe:dominoViewNamePicker labelColumn="mailinName" viewName="lkp_MailIn" label="Group Mailboxes" />
</xe:this.dataProviders>
</xe:namePickerAggregator>
</xe:this.dataProvider>
</xe:namePicker>
</xe:formRow>
</xe:formTable>
Run Code Online (Sandbox Code Playgroud)
目标是只有一个多值名称选择器,将其保存在Java Bean中,而不是文档字段中.因此,名称选择器指向xe:djextNameTextBox以便于删除名称,并且xe:djextNameTextBox绑定到我的bean.
使用此Java代码 -
public void setCategoryAdmin(ArrayList<String> categoryAdmin) {
System.out.println("Set CategoryAdmin - List");
this.categoryAdmin = categoryAdmin;
}
public void setCategoryAdmin(String categoryAdmin) {
System.out.println("Set CategoryAdmin - String");
if (!this.isBlankString(categoryAdmin)) {
ArrayList<String> al = new ArrayList<String>();
al.add(categoryAdmin);
this.setCategoryAdmin(al);
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎适用于MULTIPLE值.但如果只使用一个valule,我会收到一个错误:java.lang.IllegalArgumentException:参数类型不匹配
我认为这与XPages为多个值返回一个数组和为单个值返回一个String有关.但我不确定如何使这项工作.
任何意见,将不胜感激!谢谢!!
--UPDATE--来自Camac链接到的博客文章的代码似乎有效.
public …Run Code Online (Sandbox Code Playgroud) 如果我想在SSJS中解析文本字段,则有两个主要工具.内置的JavaScript代码和新转换的@Functions.@Functions比使用纯javascript慢吗?或者没有真正的区别?
viewScope.put("length", tmpStr.length)
Run Code Online (Sandbox Code Playgroud)
与
viewScope.put("length:, @Length(tmpStr))
Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery DataTables.我有它列出一个视图,并有复选框来选择多个文档.我可以通过此客户端JavaScript代码将选定的密钥放入会话范围:
<xp:this.script><![CDATA[// Build array of selected rows
var myTableApi = x$("inventoryTable").DataTable();
var count = myTableApi.rows( { selected: true } ).count();
var dataArr = [];
var rowData = myTableApi.rows( { selected: true } ).data();
$.each($(rowData),function(key,value){
dataArr.push(value[3]);
});
// Push that to the requestScope
setScopeValue("session", "rowCount", count);
setScopeValue("session", "rowIds", dataArr);]]></xp:this.script>
Run Code Online (Sandbox Code Playgroud)
一旦id在Scope中,我就会更改页面,然后我想将它们加载到我的Java pageController中.
我可以轻松地使用变量解析器来获取"rowIds".但是我不知道如何将它变成Java,所以我可以使用它.理想情况下,我希望它是List或Set或类似的东西.
在Java中,如何将此JavaScript数组转换为基于集合的对象?
谢谢!
我希望有一个自定义控件,可以处理我决定传递给它的任何文件.这样做的最佳方法是什么?
假设您无法直接传递集合...是否应该创建一个函数来将集合转换为UNID的hashMap或向量?
还有另外一种方法吗?
谢谢
当我想要一个文件的唯一键时,我偏爱使用@Unique().我喜欢它基于用户名和时间.
有没有办法从Java bean中获取它?
如果没有,那么在Java中获得一个不会重复的唯一数字的最佳方法是什么?
谢谢
我有这个XAgent似乎工作正常,但它在CURRENT浏览器中打开它.我如何在新窗口中打开它?
此代码在XPage的After RenderedResponse中运行.
谢谢
// Track Downloads
// Setup XAgent stuff
var exCon = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = exCon.getResponse();
var fileLink = param.get("link");
// Insert Logging Code here
facesContext.getExternalContext().redirect(fileLink);
writer.endDocument()
Run Code Online (Sandbox Code Playgroud) 这就是我想要做的事情:
在XPage上我想要一个编辑框控件,当用户按下回车键时,它会调用一些服务器端代码(Java bean或SSJS).这个主要用例是这个页面将从iPad上运行,并附带一个蓝牙条码扫描器.此扫描仪模拟键盘.用户将点击编辑框.然后,他们将使用扫描仪扫描,条形码将与"输入"键一起输入.需要立即清除编辑框以进行下一次扫描,并且需要处理扫描值.处理将对java bean执行各种后端操作,然后返回要在页面上显示的消息.基本上是其中之一:1.物品未找到,2.物品可用并已分配,3.物品已经分配,但您仍可以拥有它4.物品不可用
我有这个代码,整体核心代码工作正常.我通常使用onchange事件,但由于我遇到了这个问题,我转到了onkeypress事件.这也是尝试让它在IE中运行.再次,目标只针对iPad/Safari,但我也希望能够在桌面浏览器上使用它.我目前只在Chome进行测试.
在编辑框的CSJS片段中,我有以下代码:
var e = dojo.fixEvent(thisEvent);
if (e.keyCode == dojo.keys.ENTER) {
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是我只想在Enter上调用SSJS.
这是SSJS代码,它清除编辑框,处理值,然后设置一些viewScope变量.
// Get the value off the page and put it in to the key variable
var key:String = getComponent("scanBox").getValue();
// clear the scanbox so it's ready for the next scan.
getComponent("scanBox").setValue("");
//Managed Bean to hold the last scan value - since the scanbox is cleared we do want to show the value
Scan.setLastScan(key);
// Managed …Run Code Online (Sandbox Code Playgroud) 在XPages中,我使用一些控制器类将XPages的beforePageLoad()事件绑定到Java方法.
在这种方法中,我想将用户重定向到不同的网页.它工作..但它在控制台上抛出了大量的错误.
public void beforePageLoad() throws Exception {
Map<String, String> param = (Map<String, String>) XSPUtil.resolveVariable("param");
if (!param.containsKey("exhibitorId")) {
System.out.println("Redirecting");
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext externalContext = fc.getExternalContext();
XSPContext context = XSPContext.getXSPContext(fc);
context.redirectToPage("/test.xsp");
}
Run Code Online (Sandbox Code Playgroud)
这是基本代码..我尝试过使用externalContext ...这个示例显示了XSPContext.所以我只是不确定该怎么做.
绑定到事件不是问题.那工作得很好.它只是使用Java中的事件重定向到另一个页面.我得到的一些消息是:
2/9/15 1:06 PM:Exception Thrown Context Path:/coms/exhibitor.nsf页面名称:/home.xsp javax.faces.el.EvaluationException:com.sib中的com.ibm.xsp.acl.RedirectSignal. face.el.MethodBindingImpl.invoke(MethodBindingImpl.java:142)at com.ibm.xsp.component.UIViewRootEx.initBeforeContents(UIViewRootEx.java:1621)at com.ibm.xsp.page.compiled.AbstractCompiledPage.initComponent(AbstractCompiledPage. java.333)com.ibm.xsp.page.compiled.AbstractCompiledPage.createTree(AbstractCompiledPage.java:256)at com.ibm.xsp.page.compiled.AbstractCompiledPage.createViewRoot(AbstractCompiledPage.java:167)at com.ibm位于com.ibm.xsp.application.ViewHandlerExImpl.createViewRoot(ViewHandlerExImpl.java:567)的com.ibm.xsp.application.ViewHandlerExImpl.doCreateView(ViewHandlerExImpl.java)中的.xsp.application.ViewHandlerExImpl._createViewRoot(ViewHandlerExImpl.java:521) :142)在frostillicus.controller.ControllingViewHandler.createView(Controlli)的com.ibm.xsp.application.ViewHandlerEx.createView(ViewHandlerEx.java:90)ngViewHandler.java:89)com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251)com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)com.ibm.xsp的com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:251)位于com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)的.webapp.FacesServlet.service(FacesServlet.java:160)位于com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) )com的com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)com的com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335). com中的com.ibm.designer.runtime.domino.adapter.ComponentModule $ ServletInvoker.doService(ComponentModule.java:796)中的ibm.designer.runtime.domino.adapter.ComponentModule $ AdapterInvoker.invokeServlet(ComponentModule.java:853).位于com.ib的com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)的ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)m.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)位于org.openntf.domino的com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482).位于com.ibm.designer.runtime.domino.adapter的com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)的xsp.adapter.OpenntfHttpService.doService(OpenntfHttpService.java:86). LCD环境服务(LCDEnvironment.java:313)位于com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)引起:com的com.ibm.xsp.acl.RedirectSignal. ibm.xsp.designer.context.XSPContext.renderPage(XSPContext.java:194)位于com.ibm.xsp.designer.context的com.ibm.xsp.designer.context.XSPContext.redirectToPage(XSPContext.java:917). XSPContext.redirectToPage(XSPContext.java:929)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的controller.home.beforePageLoad(home.java:44)处.在sun.reflect.Delegat ingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)at java.lang.reflect.Method.invoke(Method.java:611)at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:138)
我有一个来自核心控件的标签面板,里面<xp:inputText>有一个用于限制字段长度的jQuery的钩子.如果我将页面更改为编辑模式时屏幕上显示此选项卡,则效果很好.但是,如果我不在该选项卡上并切换到编辑模式然后切换到我想要的选项卡,则它不起作用.
我认为这是因为当jQuery启动时这些控件不存在.任何人都知道一种方法让jQuery刷新自己来获取初始加载时不存在的新DOM添加吗?
这是页面上存在的代码:
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[$('input[maxlength]').maxlength({
alwaysShow: true,
threshold: 10,
warningClass: "label label-success",
limitReachedClass: "label label-danger"
});]]></xp:this.value>
</xp:scriptBlock>
Run Code Online (Sandbox Code Playgroud)
该领域是这样的:
<xp:inputText id="inputText2"
value="#{viewScope.vsWorkingContentAdd.description}">
<xp:this.attrs>
<xp:attr name="maxlength" loaded="true" value="75"></xp:attr>
</xp:this.attrs>
</xp:inputText>
Run Code Online (Sandbox Code Playgroud)
同样,代码工作,因为它找到已存在的字段.这个问题是关于在XPages中进行部分刷新和<xp:inputText>出现时,如何让jQuery看到它?