2 つの日付フィールドとビューにバインドされた繰り返しコントロールを持つ XPage があります。各日付フィールドで日付が選択されると、私のコードは日付範囲を作成し、ビューの「キー」パラメーターを使用して、2 つの日付の間のビュー内のドキュメントのみを返します。これは完全に機能します。この問題は、ビューから離れてから戻るときに発生します。ビューに戻ったときの状態にビューを復元する必要がある pagerSaveState コントロールがありますが、代わりにエラーが発生します。com.ibm.xsp.FacesExceptionEx: Unknown or unsupported object type in Vector
ビューの XML は次のようになります。
<xp:this.data>
<xp:dominoView var="view1" viewName="ByDeliveryDate"
keysExactMatch="true"
keys="#{javascript:sessionScope.selectedDateRange}">
</xp:dominoView>
</xp:this.data>
日付範囲を作成して sessionScope 変数に入れる SSJS は次のようになります。
function doDateRangeSearch() {
var vValStart = @Date(getComponent('StartDate').getValue());
if(vValStart==null||vValStart=='')vValStart = @Date(@Year(@Today()),1,1,0,0,0);
var vValEnd = @Date(getComponent('EndDate').getValue());
if(vValEnd==null||vValEnd=='')vValEnd = @Today();
var vDateRange = session.createDateRange(vValStart, vValEnd);
var vDateVector:java.util.Vector = new java.util.Vector();
vDateVector.addElement(vDateRange);
if(vDateVector.isEmpty())vDateVector = null;
sessionScope.selectedStartDate = vValStart;
sessionScope.selectedEndDate = vValEnd;
sessionScope.selectedDateRange = vDateVector;
/* reset the pager to the first page because if there is only one search
* result to display and if the pager was on anything except the first
* page the search result is not displayed
*/
var pager:com.ibm.xsp.component.xp.XspPager = getComponent("pager1");
pager.gotoPage(0);
}
ビューに戻るとこのエラーが発生する理由を誰か教えてもらえますか?
アップデート:
Panu の提案に従って、ビューの queryOpen イベントに次のコードを追加しました。
print("queryOpen: opening date range view");
if(sessionScope.selectedDateRange == null){
print("selectedDateRange is null")
}else{
for (var s in sessionScope.selectedDateRange) print(s);
}
print("queryOpen: completed");
Web ブラウザでビューに移動しました。このセッションでビューにアクセスするのはこれが初めてなので、ビューの最初のページに最新のドキュメントが表示されます。これはコンソールに表示されたものです: 18/10/2013 10:45:23 HTTP JVM: queryOpen: 日付範囲ビューを
開く 18/10/2013 10:45:23 HTTP JVM: selectedDateRange is null
18/10/2013 10: 45:23 HTTP JVM: queryOpen: 完了
次に、2 つの日付フィールドでいくつかの日付を選択し、SSJS 関数を呼び出すボタンをクリックしました。検索は正しく実行され、日付範囲内のドキュメントのみが表示されました。これはコンソールに表示されたものです:
18/10/2013 10:45:48 HTTP JVM: queryOpen: 日付範囲ビューを
開く 18/10/2013 10:45:48 HTTP JVM: 01/08/2013 00:00:00 GDT - 18/10/2013 00:00:00 GDT
18/10/2013 10:45:48 HTTP JVM: queryOpen: 完了
ドキュメントの 1 つをクリックして開き、ビューに戻りました。代わりにエラーページが表示されました。これはコンソールに表示されたものです:
18/10/2013 10:46:16 HTTP JVM: queryOpen: 日付範囲ビューを
開く 18/10/2013 10:46:16 HTTP JVM: null
18/10/2013 10:46: 16 HTTP JVM: queryOpen: 完了
18/10/2013 10:46:16 HTTP JVM: com.ibm.xsp.webapp.FacesServlet$ExtendedServletException: com.ibm.xsp.FacesExceptionEx: Vector で不明またはサポートされていないオブジェクト タイプ
上記に基づいて、 sessionScope.selectedDateRange はまだ存在しているように見えますが、その内容はすべて失われています。