inputText onchange事件在不活动后未调用

时间:2012-09-13 05:44:19

标签: xpages xpages-ssjs

我在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事件。

4 个答案:

答案 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,

千电子伏