2016-07-29 62 views
0

Ich verwende die folgenden:Staats Fehler mit einer Dialogsteuerung zeigt

Domino Release 9.0.1FP4HF71, 
ExtensionLibrary v16, 
ApplicationLayout control with 'bootstrapResponsiveConfiguration', 
theme: 'Bootstrap3.2.0_flat' 

In der Konfiguration Markup Anwendungs ​​Layout-Kontrolle habe ich ein basicLeafNode für Login-Dialog-Fenster.

<xe:this.bannerUtilityLinks> 
    <xe:basicLeafNode label="Login" submitValue="Login"> 
     <xe:this.onClick><![CDATA[XSP.openDialog("#{id:dialogLogin}");]]></xe:this.onClick> 
    </xe:basicLeafNode> 
</xe:this.bannerUtilityLinks> 

Hier ist Markup mit Eigenschaften für meine loginDialog:

<xe:dialog id="dialogLogin" title="Sign In" preventCache="true" 
    preload="true" keepComponents="false" partialRefresh="true" 
    extractContent="true"> 
    ... 
</xe:dialog> 

Meistens, wenn ich Sie auf den Link Login ich dieses Dialogfenster bekam:

normal login dialog

Es funktioniert gut. Das Problem tritt auf, wenn ich diese Seite später öffne, nachdem das Sitzungstimeout abläuft (oder etwas anderes schief geht). Zuerst, Anwendung Layout-Steuerelement rendert Utility-Links-Liste für "zuvor angemeldete" Benutzer (mit Benutzername und Logout) und dann "aktualisiert" sich selbst mit Links für anonyme Benutzer (Login und Sign up).

Wenn ich Login klicken jetzt dann werde ich nur einen leeren Dialog mit Kopf erhalten:

login dialog with empty content part

und eine folgende Meldung in Serverkonsole:

HTTP JVM: WARNING: CLFAD####W: State data not available for /index because no control tree was found in the cache. 

Ich habe versucht zu Ändern Sie die Eigenschaften für das dialogLogin-Steuerelement mit anderen Werten, ändern Sie die viewState-Eigenschaft der Seite in nostate und vergrößern Sie und xsp.session.timeout ordnungsgemäß Bindungen. Aber es sieht so aus, als hätte ich hier keinen Einfluss.

Nach der vollständigen Aktualisierung der Seite funktioniert mein Dialog wieder gut.

Irgendwelche Vorschläge.

Vielen Dank im Voraus.

Antwort

0

Einstellung viewState="nostate" macht die Seite zustandslos, so dass kein Komponentenbaum jemals gespeichert wird. Wenn die Seite auf Timeout verlassen wird, werden Dialog und teilweise Aktualisierungen fehlschlagen, das ist korrektes Verhalten.

Das Erhöhen der Timeouts kann zwar funktionieren, aber wenn jemand den Browser gerade schließt, weiß der Server nichts davon, so dass die Komponentenbäume bis zum Ablauf des Zeitlimits gespeichert bleiben.

Keep Session Alive-Komponente kann Ihnen geben, was Sie wollen. Aber XPages läuft immer noch über HTTP. Wenn die Zeit für die HTTP-Sitzung überschritten wird, liegt immer noch ein Problem vor.

+0

Wie erkennen wir, dass die HTTP-Sitzung abgelaufen ist? Gibt es eine Möglichkeit, dass, wenn die HTTP-Sitzung abgelaufen ist, informieren Sie den Benutzer, um sich erneut anzumelden oder um sie auf die Anmeldeseite umzuleiten. –

+0

Paul, gibt es eine Möglichkeit, Dialog in einem einzigen Aufruf neu zu erstellen, ohne die Seite aktualisieren zu müssen? Vielleicht kann es in einer Phase des JSF-Lebenszyklus getan werden, aber ich bin nicht genug damit erfahren. Können Sie sagen, wer die Meldung "Statusdaten nicht verfügbar" ausgibt? Ist es Code der Anwendungslayoutsteuerung? –

+0

@ PrashantArkal nicht mit XPages, es sei denn, die Anwendung ist anonymer Zugriff.Andernfalls wird bei jedem Aufruf zur Authentifizierung über HTTP aufgefordert, auf die XPage zuzugreifen, bevor ein Komponentenbaum für diese XPage erstellt werden kann. –