小编Lot*_*ler的帖子

如何在Xpages事件中实现"continue = false"

这是一个相当普遍的问题,但我会尽量精确:

很多时候我会被客户要求正确实现LotusScript

continue = false
Run Code Online (Sandbox Code Playgroud)

在Notes的Query*事件中.一个很常见的情况是表单的QueryOpen事件,我们实际上可以根据某些条件停止打开相关文档的过程,例如基于用户对话框的响应.

对于像querySaveDocument这样的一些Xpages事件,有非常明显的解决方案,而对于其他事件我只能建议重新思考整个逻辑,比如在更早的阶段阻止代码执行.但当然大多数人都更喜欢像"使用......重写这些代码"这样的通用方法.并且 - 说实话 - 我想知道自己;)

我或多或少熟悉Xpages/JSF生命周期,但不得不承认我没有正确的想法如何在任何给定阶段停止执行.一如既往,任何提示都是受欢迎的.

编辑(澄清我的问题,但也回应蒂姆的答案):

它不仅仅是QuerySave,而且还有QueryModeChange和QueryRecalc以某种方式需要与一个在线应用程序的逻辑一起转换,但在Xpages逻辑中没有它们的等价物.这两个概念(基于表单和基于xpages)在这一点上有太大的不同吗?

例如,考虑一个工作流应用程序,我们需要在允许在编辑模式下为潜在作者打开现有文档之前检查某些条件.在我的Notes客户端应用程序中,我将一些代码添加到2个事件,即QueryOpen,我在其中检查" mode "arg和第二个QueryModeChange,在那里我检查当前的doc模式.在这两种情况下continue = false,如果需要,我可以通过添加my来阻止编辑文档.根据事件,文档将不会更改其模式,或者根本不会打开.

使用Xpage我可以使用按钮来更改文档的编辑模式,我可以"隐藏"这些按钮,或者只是添加一些检查代码或其他.但17年的Domino咨询至少给我上了一课:总会有用户找到隐藏的方法来实现他们的目标.在我们的案例中,他们可能会发现对页面URL的简单修改最终将允许他们编辑文档.为了防止这种情况,我可以使用" beforeRenderResponse "事件,我假设.但是之后,在其他情况下也会调用beforeRenderResponse,因此我们必须首先调查当前的情况.或者我可以确保用户没有作者权限,除非情况允许.

同样,这不是一个大问题,但是当从传统Notes应用程序进行转换时,这意味着重新思考其整个逻辑.这使得这项工作更加明显,而且更加昂贵.

真正?或者我错过了这个概念的一些关键部分?

lotusscript lotus-domino xpages xpages-ssjs

5
推荐指数
1
解决办法
1004
查看次数

从视图列中检索数据时如何避免64k限制?

我知道SSJS版本@DbColumn()与原始的Formula语言版本具有相同的64k限制.所以直到现在我才使用NotesView.getColumnValues(),相信在这里我不会面临这样的限制.

昨天的紧急支持电话告诉我,这显然是错误的,以及IBM的这份崩溃报告.

有问题的代码用于填充comboBox中的selectItems控件; 打开托管comboBox的页面会崩溃服务器的http任务,然后导致整个服务器崩溃:

<xp:selectItems>
    <xp:this.value><![CDATA[#{javascript:database.getView("vwInvBySupplier").getColumnValues(0);}]]>
    </xp:this.value>
</xp:selectItems>
Run Code Online (Sandbox Code Playgroud)

这是从视图中查找所有类别条目.我正在使用组合作为动态类别过滤器来显示在同一页面上的视图.

即使检索到的数据超过64k,还有哪些替代方法可以从视图中检索所有类别条目的完整列表?

图片的标题说明:

我完全清楚,在一个comboBox中显示超过2000个条目对某些人来说可能不是一个令人信服的可用性概念,但是客户喜欢能够在一个地方看到所有可用的条目,然后能够从该列表中进行选择.至少具有视图面板的标准解决方案充满了类别条目,曲折以及跨越多个页面的需要不是解决方案.

该应用程序在Domino 9.0.1,WinSrv 2008/64k上运行

xpages xpages-ssjs

4
推荐指数
1
解决办法
686
查看次数

在Designer中,SSJS库随着它们的增长而变慢

对于大多数Xpages应用程序,我观察到,在设计器中,ssjs库随着增长而变得越来越慢.一个例子是目前有1200多行代码(包括注释)的库,包含40多个函数.每次我在设计器中访问库时(例如,从不同的选项卡切换到托管库代码的那个),都会有很多闪烁,重建和重新读取,这可能需要几秒钟.

这不是我不能等待,但它让我感到有些不安,我想知道是否存在某种限制(关于代码行,或函数数量,或两者兼而有之)我应该观察到的.将代码拆分成各种库会更好吗?

并且,是的:我正在考虑将至少一些功能重建为javaBeans,但基本问题仍然存在.

最后,不,我没有观察到运行时性能的任何下降.这只是一个设计时问题.

xpages xpages-ssjs

3
推荐指数
1
解决办法
100
查看次数

Xpages:managedBean不断"丢失"全局Domino Session对象

我正在为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绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重启了整个服务器......

java session managed-bean xpages xpages-ssjs

3
推荐指数
1
解决办法
275
查看次数

什么是复杂属性"所有属性>数据>属性"有什么用?

这只是出于好奇:在xpage中寻找其他类型的属性我偶然发现了"所有属性>数据>属性".这是一个复杂的道具,可以在名称>值对的集合中添加多个参数元素.

我试着在这里添加一个示例参数

<xp:this.properties>
    <xp:parameter
        name="param"
        value="val">
    </xp:parameter>
</xp:this.properties>
Run Code Online (Sandbox Code Playgroud)

在浏览器中呈现该页面根本不显示任何更改,既不在页面的html源代码中,也不在http头文件中的某个位置,DOM树等.

任何人都可以了解这个属性集可用于什么?

xpages

3
推荐指数
1
解决办法
118
查看次数

是否有适用于所有当前extlib软件包的javadoc库?

昨天有客户问我是否有某种类型的javadoc库可用于所有extlib控件对象,就像我们将它用于标准的Xpage相关控件一样:http://public.dhe.ibm.com/software/dw/lotus/ Domino的设计师/ JavaDoc中/ DesignerAPIs/index.html的

我只能说"看看XpagesExt.nsf,看看他们是怎么做到的......".我觉得这是一个非常蹩脚的答案.所以我今天早上用了一半谷歌搜索但找不到任何东西.有人给我链接?

谢谢,洛萨

xpages xpages-ssjs xpages-extlib

3
推荐指数
1
解决办法
74
查看次数

在IE中无法在ENTER上提交搜索

要执行全文搜索,用户只需要在简单的inputText中输入查询即可。然后,一旦他们按ENTER键,搜索本身就会开始。

目前,我们试图像这样解决它:

  • inputText绑定到sessionScope变量 myQuery
  • 输入还具有绑定到其的OpenPage操作 onchange事件
  • 将要打开的页面包含一个viewPanel以及一个绑定到我们的sessionScope变量的搜索过滤器,以及更多的FT过滤字段。

在Firefox和Chrome中可以正常工作,但在IE中不能正常工作 ; 显然,IE无法将ENTER键识别为onchange-trigger。

因此,我尝试使用控件的onkeyup事件记录和分析击键,例如

var q=sessionScope.get("myQuery");
return q.charCodeAt(q.length-1);
Run Code Online (Sandbox Code Playgroud)

适用于所有标准字符,但不适用于ENTER键(我原本希望在其中收到代码13)。

我目前确实在控件的onkeyup事件中使用CSJS代码有某种解决方法,如下所示:

if(event.keyCode===13){
    var p=location.pathname.split("/");
    p.pop();
    location.replace(p.join("/") + "/search.xsp");
}
Run Code Online (Sandbox Code Playgroud)

但这有一些副作用,有可能使事情变得更复杂,并且感觉有点像黑客。因此,我更愿意使用服务器端脚本来解决它。

问题是:

  • 有没有一种方法可以捕获ENTER键击,以便我们对其做出反应?
  • 还是我们在这里走错了路?

xpages

2
推荐指数
1
解决办法
664
查看次数

XPages:从managedBean读取私有属性失败

在Xpage中,我需要计算多个checkBox控件的禁用属性.所以我为此构建了一个javaBean并将其注册为managedBean.原则上它就像一个魅力:一个computedField控件的value属性使用EL绑定到bean的一个私有变量:

value="#{myBean.myTestValue}"
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它显示了正确的内容.

接下来,我将checkBox的disabled属性绑定到我的bean中计算的私有布尔变量,再次使用EL:

disabled="#{myBean.isCheckBoxDisabled}"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这次javax.faces.el.PropertyNotFoundException抛出了.

作为一种解决方法,我创建了一个getter方法,然后我从checkBox的disabled属性调用,这次作为JS代码:

disabled="#{javascript:myBean.isCheckBoxDisabled()}
Run Code Online (Sandbox Code Playgroud)

这是按预期工作,已设置disabled属性.这对我来说基本没问题虽然我本来喜欢用EL做这件事,因为这似乎是最佳实践.

问题是:为什么控件的value属性可以使用bean的私有变量而disabled属性不能?

java managed-bean xpages xpages-ssjs

1
推荐指数
1
解决办法
97
查看次数

我们可以使用Xpages主题设置特殊元标记吗?

我知道我可以<meta>使用我的Xpages主题创建普通标签."普通"是指<meta>由"名称"和"内容"属性组成的标签
<meta name="author" content="me myself I">.
我不知道的是我如何创建不同类型的元标记,比如<meta http-equiv="expires" content="86400">我们有一个"http-equiv"属性而不是"name"属性.
任何人的想法?

xpages

1
推荐指数
1
解决办法
277
查看次数