我在inputText字段上启用了typeahead,触发onChange事件。这工作正常,除非页面在一段时间内没有刷新(在测试中,它在1小时后停止工作但可能更少)。刷新页面完全解决了问题。
inputText字段的代码如下;
<xp:inputText id="quickSelectEntry" style="width:170px;">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="placeHolder" value="Enter name">
</xp:dojoAttribute>
</xp:this.dojoAttributes>
<xp:typeAhead mode="none" minChars="2" ignoreCase="true"
var="searchValue" valueMarkup="true">
<xp:this.valueList><![CDATA[#{javascript:return nameTypeAhead(searchValue)}]]></xp:this.valueList>
</xp:typeAhead>
<xp:eventHandler event="onchange" submit="true"
refreshMode="norefresh">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var searchVal:string = getComponent("quickSelectEntry").getValue();
if (searchVal.substr(0,1).equals("?")) {
context.redirectToPage("xCheckSecurityGroup.xsp?group=" + searchVal.substr(1));
return false;
} else {
var doc:NotesDocument = quickLookupView.getDocumentByKey(searchVal, true);
if (null != doc) {
viewScope.lookupKey = doc.getUniversalID();
viewScope.lookupForm = doc.getItemValueString("form");
return true;
} else {
viewScope.lookupKey = ""
viewScope.lookupForm = ""
return false;
}
}
]]></xp:this.script>
</xp:executeScript>
<xp:actionGroup>
<xp:this.condition><![CDATA[#{javascript:viewScope.lookupKey != ""}]]></xp:this.condition>
<xp:openPage target="openDocument"
documentId="#{javascript:return viewScope.lookupKey}">
<xp:this.name><![CDATA[#{javascript:return "x" + viewScope.lookupForm + ".xsp" }]]></xp:this.name>
</xp:openPage>
</xp:actionGroup>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
到目前为止,我已尝试对包含的面板进行定时部分刷新,没有任何乐趣,我已将typeahead模式从none设置为full。没有不同。
除了每10分钟刷新一次页面外,还有其他什么东西可以导致问题。 FYI实际的预先输入正常工作,它只是停止触发的onchange事件。
答案 0 :(得分:2)
似乎发生的事情是服务器网络会话完好无损,但XPage会话丢失了。
将以下内容添加到XPage的底部,它将根据您的设置(以毫秒为单位)预先刷新DIV(300000 = 300秒= 5分钟) - 我测试成功的最长时间是3.5小时。
您需要设置一个值,该值至少比数据库的应用程序属性中设置的会话超时长度少一分钟。
<xp:div id="keepSessionAlive"></xp:div>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value>
<![CDATA[
XSP.addOnLoad(function(){
setInterval(function(){
XSP.partialRefreshPost("#{id:keepSessionAlive}", {});
}, 300000)
})]]>
</xp:this.value>
</xp:scriptBlock>
不要设置较短的刷新时间,因为这会不必要地浪费带宽,并且还会使浏览器无法很好地管理IE的RAM使用量。
同时了解这是一个安全问题 - 通过基本上保持闲置计算机的会话存活,你可以在没有用户知情的情况下将其打开劫持 - 这是超时点的一部分
答案 1 :(得分:1)
问题是XSP会话超时(根据您的服务器设置)。有关保持会话活动的建议,请参阅此答案: How do I refresh page automatically when partial refresh doesn't work?
答案 2 :(得分:1)
我也见过这个。我最终放入元刷新标签,每30分钟重新加载一次页面。这是唯一似乎有用的东西。
霍华德
答案 3 :(得分:0)
可能要检查应用程序属性(转到Xpages选项卡)。在那里,您可以为数据库设置应用程序和会话超时。如果这些是空白的,我认为它们将默认为服务器,通常为30分钟。
V / R,
千电子伏