使用Domino Designer 8.5.3时,我使用Java设计元素添加了一堆自定义类.我希望在我的自定义类中使用第三方JAR,就像在xPages SSJS中使用外部JAR一样,通过Package Explorer:
的WebContent - > WEB-INF - > LIB
但是我的自定义类没有选择JAR.
这是一个已知的限制还是我的配置搞砸了?
在我的Notes数据库中,我在保存文档时执行审核.在LotusScript中非常简单.我从服务器获取原始文档(oDoc),然后在我修改的文档(mDoc)中,我做了一个Forall循环,它获取每个项目的名称; mDoc.items中的forall项.从oDoc中获取相同的项目,使用新项目作为参数执行一个函数,该函数将运行一个case语句,该语句将查看它是否是我们关心的字段.如果是这样,我用"When","Who","What field"和"New Value"更新文档中的一组列表值.
我在服务器端脚本中这样做.在尝试这个时,我发现了一些有趣的东西;
currentDocument是NotesXSPDocument,包含刚刚更改的所有内容.
currentDocument.getDocument()包含更改前的值.它还返回一个NotesDocument,它包含我可以运行的"items"字段.
事实是,我在NotesXSPDocument中需要类似的东西.在迭代循环中有没有办法从那里获取所有项目的名称和值?
这是破碎的代码.(目前它正在浏览NotesDocument项目,但这些是旧的值.我宁愿走下XSP文档项目)
function FInvoice_beginAudit() {
var original_doc:NotesDocument = currentDocument.getDocument();
var oItem:NotesItem;
var oItems:java.util.Vector = original_doc.getItems();
var iterator = oItems.iterator();
while (iterator.hasNext()) {
var oItem:NotesItem = iterator.next();
item = currentDocument.getItemValue(oItem.getName());
if (oItem == undefined) {
var MasterItem = ScreenAudit(doc,item,True)
if (MasterItem) { return true }
} else {
if (item.getValueString() != oItem.getValueString()) {
var MasterItem = ScreenAudit(doc,Item,True);
if (MasterItem) { return true }
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 在开发XPage应用程序时,主要使用Java方法和bean而不是服务器端JavaScript(SSJS)似乎变得非常流行.SSJS当然需要更长的时间来执行,因为代码必须在运行时进行评估.但是,在使用Java时,是否有人可以提供有关QUANTITATIVE性能提升的信息?是否存在执行时间差异的基准,例如,取决于SSJS代码的长度或使用的函数?
在我的XPages应用程序中,我经常使用SSJS对象(com.ibm.jscript.std.ObjectObject)来缓存数据.如果我使用java.util.HashMaps来检查性能是否有所提高,我会对以下代码片段(SSJS)的执行时间进行基准测试:

所有三个代码片段都是相同的:它们创建并填充SSJS对象或具有不同类型数据/对象的HashMap.对于每个片段,我测量了超过1000次运行的平均执行时间,其中n(=片段中的最大循环索引)为1000000(100万).基准测试是使用java.lang.System.nanoTime在Domino 9.0.1服务器上执行的.
所述的比率的执行时间如下:
换一种说法:
我的问题如下:
我想在服务器上使用SSJS创建一个xml文件.有办法吗?任何人都可以提供一个示例代码来在服务器上创建一个xml文件.
我正在尝试从XPage的beforePageLoad事件中的配置文件中获取值.为此,我使用Server Side Javascript:
var currdb:NotesDatabase = database;
var profdoc:NotesDocument = currdb.getProfileDocument("frmProfile","");
var showRefInfo = profdoc.getItemValueString("ShowReferenceInformation");
sessionScope.put("showRefInfo",@Text(showRefInfo));
Run Code Online (Sandbox Code Playgroud)
字段"ShowReferenceInformation"可以具有值1或0.我已将此值从0更改为1,但是我的SSJS代码继续返回0.可能导致此问题的原因是什么?
我知道我可以通过以下方式禁用xsp.properties中的服务器或应用程序:
xsp.client.validation=false
Run Code Online (Sandbox Code Playgroud)
并在控制层通过:
disableClientSideValidation="true"
Run Code Online (Sandbox Code Playgroud)
没有为每个控件设置disableClientSideValidation,有没有办法在XPage级别禁用?
对于大多数Xpages应用程序,我观察到,在设计器中,ssjs库随着增长而变得越来越慢.一个例子是目前有1200多行代码(包括注释)的库,包含40多个函数.每次我在设计器中访问库时(例如,从不同的选项卡切换到托管库代码的那个),都会有很多闪烁,重建和重新读取,这可能需要几秒钟.
这不是我不能等待,但它让我感到有些不安,我想知道是否存在某种限制(关于代码行,或函数数量,或两者兼而有之)我应该观察到的.将代码拆分成各种库会更好吗?
并且,是的:我正在考虑将至少一些功能重建为javaBeans,但基本问题仍然存在.
最后,不,我没有观察到运行时性能的任何下降.这只是一个设计时问题.
我正在为Xpages应用程序构建managedBean.目前,bean在视图范围的faces-config中注册,因为我需要它在每个页面加载时重新初始化(见下文).bean的构造函数初始化了几个类变量,这些变量的值在整个类的代码中被引用.其中一个变量是Domino session对象,另一个例子是当前的document datasource:
private Session session;
private DominoDocument ds;
Run Code Online (Sandbox Code Playgroud)
两者都在构造函数中初始化为
session=DominoUtils.getCurrentSession();
ds=(DominoDocument) resolveVariable(dsName);
Run Code Online (Sandbox Code Playgroud)
(resolveVariable是一个内部帮助方法;不要认为我需要在这里解释一下)
除了构造函数和各种帮助器方法之外,在同一个类中还有一些其他公共方法在按钮单击时调用.大多数这些附加方法都使用相同的文档数据源以及当前的会话对象.
发生的事情是我的其他方法可以访问和使用全局数据源对象(ds)但是如果它们试图访问全局会话对象则会引发错误; 进一步向下堆栈跟踪我发现似乎导致错误:
NotesException: Object has been removed or recycled
Run Code Online (Sandbox Code Playgroud)
我的代码现在根本没有回收,会话对象必须在途中丢失.
作为一种解决方法,我开始将会话对象从SSJS传递到每个方法中
public void testMethod(Session s){System.out.println("my name is"+ s.getEffectiveUserName()); }
哪个工作正常.但是为什么bean对象会记住所有其他对象和变量而忘记全局会话?
BTW:我试图将我的managedBean绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重启了整个服务器......
当我在EL中引用bean属性(id)时,我会使用#{bean.id}.
我现在要求使用一些静态文本预先添加该数据.我通过使用SSJS来做到这一点:"sometext" + bean.getId();
有没有办法在SSJS中使用EL符号?例如"sometext" + #{bean.id};
我意识到在这个例子中它没有太大的不同,但是当请求更复杂或嵌套的属性时,我认为它会有用.
xpages ×10
xpages-ssjs ×10
java ×1
javascript ×1
lotus ×1
lotus-domino ×1
lotus-notes ×1
managed-bean ×1
session ×1
validation ×1