1

onChange イベントをトリガーする inputText フィールドで先行入力を有効にしています。ページが一定期間更新されていない限り、これは問題なく動作します (テストでは、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>

これまでのところ、含まれているパネルの時間指定された部分的な更新を喜んで実行しようとしましたが、先行入力モードをなしから完全に設定しました。変わりはない。

ページを 10 分ごとに更新する以外に、問題の原因となっているものはありますか。参考までに、実際の先行入力は一貫して正しく機能しており、onchange イベントの発生が停止するだけです。

4

4 に答える 4

2

サーバーの Web セッションはそのままですが、XPages セッションが失われているようです。

以下を XPage の下部に追加すると、設定 (ミリ秒単位) (300000 = 300 秒 = 5 分) に基づいて DIV が定期的に更新されます。これまでに成功したテストの最長時間は 3.5 時間です。

データベースのアプリケーション プロパティで設定されているセッション タイムアウトの長さより少なくとも 1 分短い値を設定する必要があります。

<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 使用量を肥大化させるため、短い更新時間を設定しないでください。

これは同時にセキュリティ上の問題であることを理解してください - 基本的にアイドル状態のコンピューターのセッションを維持することにより、ユーザーの知らないうちにセッションを乗っ取ることができます - それはタイムアウトのポイントの一部です

于 2012-09-13T20:14:47.140 に答える
1

私もこれを見たことがあります。最終的に、30 分ごとにページをリロードするメタ リフレッシュ タグを挿入しました。それが機能しているように見える唯一のものでした。

ハワード

于 2012-09-13T13:17:21.030 に答える
1

問題は、XSP セッションが (サーバー設定に従って) タイムアウトすることです。セッションを維持するための推奨事項については、この回答を参照してください: 部分的な更新が機能しない場合、ページを自動的に更新するにはどうすればよいですか?

于 2012-09-13T06:40:05.667 に答える
0

アプリケーション プロパティを確認してください ([Xpages] タブに移動します)。そこで、データベースのアプリケーションとセッションのタイムアウトを設定できます。これらが空白の場合、通常は 30 分のサーバーにデフォルト設定されると思います。

V/R、

ケブ

于 2012-09-13T21:53:40.813 に答える