2012-11-27 10 views
5

自動補完のためにタイプアヘッドのinputText XPagesコントロールを使用しています。検索フィールドに入力するとき、提案は表示されません。タイプアヘッドのプロパティペインにコンマ区切りの候補リストが設定されていて、候補セパレータは "、"です。私たちはまた、「新しい行」の分離された提案の使用を試みました。最小文字は "1"です。ここでは、inputTextのXMLがあります:提案の読み込み中にXPagesの先行型が失敗する

<xp:inputText id="inputText2"> 
<xp:typeAhead mode="partial" minChars="1" ignoreCase="true" valueListSeparator=","> 
    <xp:this.valueList><![CDATA[Homer,Marge,Bart,Lisa,Maggie]]></xp:this.valueList> 
</xp:typeAhead> 
</xp:inputText> 

"full"と "partial"モードは両方とも失敗しますが、エラーは異なります。 「フル」を使用する場合は、検索フィールドに入力した各文字のために以下のエラーがブラウザのコンソールに表示されます(はい、これらのすべてが単一のキープレスによって引き起こされる):

Error: Unable to load undefined status:404 
dijit.form.ComboBox: Error: Unable to load undefined status:404 
Error: Unable to load undefined status:404 
Error: Unable to load undefined status:404 
Error: Unable to load undefined status:404 

同様にモードの「部分」 、次のエラーメッセージが入力された各文字のために表示されます。

'url' is null or not an object 

この最後のエラーは、dojo.jsに由来する(ロータスノーツ8.5.3、ライン14、文字84996で使用縮小さバージョン)。これは縮小されたスクリプトには記述されていないため、dojoのバージョンはわかりませんが、Version 1.6.1はほぼ正しいバージョンと考えています。

dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ 
    //summary: Adds query params discovered by the io deferred construction to the URL. 
    //Only use this for operations which are fundamentally GET-type operations. 
    if(ioArgs.query.length){ 
     ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; 
     ioArgs.query = null; 
    } 
}; 

これはエラーの原因となるコードを特定したものです。

のinputText用に生成されたマークアップは次のようになります。

<span id="view:_id36:_id38:_id119" dojotype="ibm.xsp.widget.layout.data.TypeAheadReadStore" jsid="view__id36__id38__id119" mode="full"></span> 
<div class="dijit dijitReset dijitInlineTable dijitLeft xspInputFieldEditBox dijitTextBox dijitComboBox" id="widget_view:_id36:_id38:inputText2" role="combobox" widgetid="view:_id36:_id38:inputText2"> 
<div class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" dojoattachpoint="_buttonNode, _popupStateNode" role="presentation" style="display: none;"> 
    <input class="dijitReset dijitInputField dijitArrowButtonInner" value="? " type="text" tabindex="-1" readonly="readonly" role="presentation"> 
</div> 
<div class="dijitReset dijitValidationContainer"> 
    <input class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" value="? " type="text" tabindex="-1" readonly="readonly" role="presentation"> 
</div> 
<div class="dijitReset dijitInputField dijitInputContainer"> 
    <input class="dijitReset dijitInputInner" name="view:_id36:_id38:inputText2" type="text" autocomplete="off" dojoattachpoint="textbox,focusNode" role="textbox" aria-haspopup="true" id="view:_id36:_id38:inputText2" tabindex="0" value=""> 
</div> 
</div> 

任意の提案は(しゃれ意図)をいただければ幸いです!

+0

ヒットF12と、ネットワークトラフィックを探して、その後、確認してくださいどのようなURL /要求がエラー404 –

+0

チェックを引き起こしなぜdijit.form.ComboBoxに関するエラーメッセージが表示されるのですか? ComboBoxに同じページに失敗しましたか?そのComboBoxをXPageから削除し、何が起こるかを見てください。 –

+0

@FrantisekKossuthエラーを引き起こす要求は(サーバー名とデータベース名は匿名で)http:// .com/ .nsf/undefinedです。 –

答えて

4

XPagesプロパティcreateFormを確認してください。 0以外の場合はに設定して削除するか、に変更してください。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" createForm="true"> 

タイプ先読み機能は、HTMLフォームのアクションプロパティからターゲットURLを計算します。このフォームが利用できない場合、先行するタイプは失敗します。 自動生成されたフォームを無効にする必要がある場合は、XPageに手動でフォームを追加する必要があります。

編集:

Alternativlyあなたが先行入力データストアのCSJSコードを上書きしがあなたのXPageのあなたのURLを注入する方法を取得操作することができます。

編集2:ここ

が先行入力を修正したスクリプトブロックです:

<xp:scriptBlock id="scriptBlockFixTypeAhead"> 
    <xp:this.value> 
     <![CDATA[dojo.addOnLoad(function(){ 
      ibm.xsp.widget.layout.data.TypeAheadReadStore.prototype.fetch = function tars_f(_5) { 
      var _6 = _5.query.name; 
      if (_6.length < this.minChars) { 
       _5.onComplete([], _5); 
       return; 
      } 
      this.content.$$value = _6; 
      var _7 = {url: '#{javascript:context.getUrl().getPath()}', 
       handleAs: "text", timeout: XSP.submitLatency, content: this.content, 
       form: this.sendForm ? this.formId : null, 
       load: dojo.hitch(this, this.retrieved, _5), 
       error: dojo.hitch(_5, _5.onError)}; 
      dojo.xhr(this.method, _7, !this.contentInUrl); 
      return _5; 
     }}) 
    ]]></xp:this.value> 
</xp:scriptBlock> 
+0

あなたの返信をありがとう。私たちのページでcreateFormは本当にfalseに設定されていました。これをtrueに設定すると問題の一部が修正されますが、ページ上の他の機能と矛盾します。フォーム要素を手動で追加することも問題です。私たちは現時点では時間がないので、後でこの問題に戻る必要があります。 –

+0

@ØysteinJaren Samuelsen:もう一つの回避策を追加しました。これは、CSJSコードのハードハックです。あなたのページにスクリプトブロックを追加するだけです。お役に立てれば。 –

関連する問題