2017-05-15 4 views
1

Ich habe den Verlust von sessionScope-Variablen zwischen XPages verloren, wenn ich DateTime-Werte aus einem Notes-Dokument lade (nicht von der XPage). Hier ist, was ich tue:XPages sessionScope-Variable und DateTime-Werte

Ich habe eine EditBox, wo der Inhalt festgelegt Datum eingeben nur:

<xp:inputText value="#{document1.datum}" id="datum" defaultValue="#{javascript:@Now()}" required="true"> 
<xp:this.converter> 
    <xp:convertDateTime type="date"></xp:convertDateTime> 
</xp:this.converter> 
<xp:dateTimeHelper></xp:dateTimeHelper> 
</xp:inputText> 

ich diese dann speichern zu einer sessionScope Variable:

sessionScope.put ("datum", getComponent("datum").getValue()); 

Dann habe ich ändern XPages, indem Sie ein:

var extCont = facesContext.getExternalContext(); 
extCont.redirect("xpNextPage.xsp") 

ich dann eine sessionScope.get:

print (sessionScope.get ("datum")); 

Und der Inhalt ist in Ordnung.

wenn ich das gleiche tun mit einem Dokument, das ich geladen haben:

var date:NotesDateTime = doc.getItemValueDateTimeArray("datum"); 
var start:NotesDateTime = doc.getItemValueDateTimeArray("von"); 
var dt:NotesDateTime = session.createDateTime (date [0].getDateOnly() + " " + start [0].getTimeOnly()); 
sessionScope.put ("datum", dt); 

dann auf die nächste Seite wechseln und versuchen, und laden Sie es mit:

print (sessionScope.get ("datum")); 

ich einen Wert bekommen null.

Ich habe einen Screenshot des Problems beigefügt (ich habe auch andere Felder gedruckt, damit Sie sehen können, dass nur die DateTime-Felder das Problem sind). Ich stelle fest, dass das Format des DateTime-Wertes anders ist ... könnte das das Problem sein?

example of the sessionScope variable problem

+0

Kann versuchen Sie sie speichern als Java Daten an die sessionScope (z ndt.toJavaDate()) anstelle von NotesDateTime. Ich denke, der Session-Bereich funktioniert ähnlich wie Beans, da er serialisierbar sein muss. Die NotesDateTime-Klasse ist nicht serialisierbar. –

+0

danke für den Tipp Rob - das war das Problem - jetzt funktioniert es einwandfrei: o) –

+0

Gern geschehen Ursus. –

Antwort

4

NotesDataTime ist nicht serialisierbar, so dass Sie es nicht in dem Speicher gespeichert werden können. Wenn Sie getComponent("datum").getValue() verwenden, gibt es Ihnen Java-Datum nicht NotesDataTime zurück. Das Java-Datum ist serialisierbar, also funktioniert es. Versuchen Sie, Ihre NotesDataTime in Java-Datum zu konvertieren.

dt.toJavaDate()