1

xpage に検索機能を作成しました。ユーザーはリスト ボックスとコンボ ボックスから値を選択でき、ftsearch クエリはこれらの値から構成されます。そのため、コンボ ボックスの値を変更すると、onChange イベントがトリガーされ、結果の表示が部分的に更新されます。問題は、ビューが onChange の前のコンボ ボックスの以前の値に従って結果を表示することです。ビューの結果は常に 1 つ遅れているようです。

イベントに try/catch を追加しましたが、例外は発生しません。本当に奇妙な行動に思えます。誰もこのようなことを経験したことがありますか?

問題が何であるかについて今行き詰まっているので、アイデアや指示をいただければ幸いです。

よろしくお願いします!

4

1 に答える 1

2

非常に簡単な方法で試してみたところ、うまくいきました。ここに私が持っているものがあります:

  1. 私のデータベースがftインデックスされていることを確認してください!!
  2. id = "viewPanel1" で viewPanel を作成します
  3. viewPanel をビュー データソースにリンクする
  4. 次のコードを使用して、viewPanel の計算された検索プロパティを作成します。

    requestScope.get("fts");

  5. ビューパネルの上にコンボボックスを作成します

  6. コンボを requestScope 変数「fts」にバインドします
  7. コンボのオプション リストに適切な値を入力します
  8. コンボの onchange イベントで部分的な更新を実行し、これを viewPanel (ID: viewPanel1) にリンクします。

私の場合、「sub 1」、「sub 2」、...、「sub 6」などの値を持つ件名フィールドを持つテスト ドキュメントがビューに表示されます。そこで、コンボにオプション「1」...「6」を提供させました。

ft 検索文字列をより具体的にしたい場合は、viewPanel の検索プロパティで次のように作成できます (手順 4)。

if(requestScope.containsKey("fts") && requestScope.get("fts")!=""){
    "Sub " + requestScope.get("fts");
}

それだけです-動作します。

問題が間違っている場合はお知らせください。その場合、何をしようとしているのか、これまでに何を試したのかについて、より具体的に説明する必要があります。

編集:
あなたのコメントに続いて、リストボックスをコンボに追加しました。listBox 自体は何も悪いことをしていないことがわかりますが、もちろん、この 2 つが互いに干渉しないように注意する必要があります。それで、これを解決するために私がしたことは次のとおりです。

  1. 「 ftsCombo」と呼ばれる別の requestScope 変数に自分のコンボボックスをバインドしました
  2. それに応じてリストボックスを「ftsList」にバインドしました
  3. 両方のコントロールに同じオプション リストがあり (上記を参照してください。もちろん、異なるオプションを使用できます。異なる値を考えるのが面倒でした...)、変更時に部分的な更新を実行しています。
  4. 結果を制御できるようにするために、viewPanel (id = " tgtPanel ") の周りに名前付きパネルを作成し、そのパネルを対象とするように部分更新ルールを変更しました
  5. ビューの上のパネル内に 2 つの計算フィールドを作成し、それぞれが requestScope 変数 ( ftsCombo / ftsList ) の 1 つにバインドされているため、 onchange がトリガーされた後にスコープ内にあるものを確認できます
  6. 両方の onchange イベントで、SSJS コードの短いスニペットを作成して、「他の」変数をクリアし、2 つの変数が互いに邪魔にならないようにしました。

(コンボのオンチェンジ:)

requestScope.remove("ftsList");  

(リストの変更時:)

requestScope.remove("ftsCombo"); 

最後に、ビューの計算された検索プロパティを次のように変更しました。

if(requestScope.containsKey("ftsCombo") && requestScope.get("ftsCombo")!=""){
return "Sub " + requestScope.get("ftsCombo");
}
if(requestScope.containsKey("ftsList") && requestScope.get("ftsList")!=""){
 return "Sub " + requestScope.get("ftsList");
}

これで、コンボまたはリストを使用してフィルターを適用できます

于 2013-04-02T15:36:26.107 に答える