2012-11-27 25 views
5

Chúng tôi đang sử dụng kiểm soát XP của inputText với Loại Ahead để tự động hoàn thành. Khi nhập vào trường tìm kiếm, không có đề xuất nào xuất hiện. Chúng tôi có một danh sách các đề xuất được phân cách bằng dấu phẩy được đặt trong ngăn Thuộc tính loại trước và dấu tách đề xuất là ",". Chúng tôi cũng đã thử sử dụng các đề xuất "dòng mới". Các ký tự tối thiểu là "1". Đây là xml cho inputText:XPages Loại Không thành công khi đang tải đề xuất

<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> 

Sử dụng chế độ "đầy đủ" và "một phần" cả hai đều không thành công, nhưng có lỗi khác nhau. Khi sử dụng "đầy đủ", cho mỗi chữ cái gõ vào trường tìm kiếm các lỗi sau đây xuất hiện trong trình duyệt giao diện điều khiển (có, tất cả trong số này được gây ra bởi một phím bấm duy nhất):

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 

Tương tự như vậy đối với chế độ "một phần" , thông báo lỗi sau xuất hiện cho mỗi chữ được nhập:

'url' is null or not an object 

Lỗi cuối cùng này bắt nguồn từ dojo.js (phiên bản rút gọn được sử dụng với Lotus Notes 8.5.3, dòng 14, ký tự 84996). Chúng tôi không chắc chắn phiên bản của dojo này là gì, bởi vì nó không được nêu trong kịch bản rút gọn, nhưng chúng tôi nghĩ rằng Version 1.6.1 là khoảng phiên bản phù hợp. Chúng tôi đã phân lập mã gây ra lỗi:

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; 
    } 
}; 

Đây là lỗi gây ra lỗi.

Các đánh dấu tạo cho inputText trông như thế này:

<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> 

Mọi góp ý (ý định chơi chữ) sẽ được đánh giá rất nhiều!

+0

hit F12 và tìm kiếm lưu lượng mạng, sau đó kiểm tra những gì url/yêu cầu gây ra lỗi 404. –

+0

Và kiểm tra tại sao bạn nhận được một thông báo lỗi về dijit.form.ComboBox. Bạn có một ComboBox trên cùng một trang không thành công? Hãy thử xóa ComboBox đó khỏi XPage và xem điều gì xảy ra. –

+0

@FrantisekKossuth Yêu cầu gây ra lỗi là (với tên máy chủ và cơ sở dữ liệu ẩn danh): http: // .com/ .nsf/undefined. –

Trả lời

4

Vui lòng kiểm tra thuộc tính XPages createForm. Nếu được đặt thành false, hãy xóa hoặc thay đổi thành đúng.

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

Các Loại chức năng Ahead tính toán URL mục tiêu từ hành động tài sản của các hình thức HTML. Nếu biểu mẫu này không có sẵn, loại trước không thành công. Nếu bạn cần tắt biểu mẫu được tạo tự động, bạn phải thêm biểu mẫu theo cách thủ công vào XPage.

Edit:

Alternativly bạn có thể ghi đè mã CSJS của lưu trữ dữ liệu Typeahead và thao tác các lấy phương pháp để tiêm URL của bạn của XPage của bạn.

Chỉnh sửa 2:

Đây là một khối kịch bản mà ấn định typeahead:

<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

Cảm ơn bạn đã trả lời. createForm thực sự được đặt thành false trên trang của chúng tôi. Đặt nó thành đúng là một phần của vấn đề, nhưng nó xung đột với các chức năng khác trên trang của chúng tôi. Việc thêm phần tử biểu mẫu theo cách thủ công cũng có vấn đề. Chúng tôi sẽ phải quay lại vấn đề này sau, vì chúng tôi đã hết thời gian vào lúc này. –

+0

@ Øystein Jaren Samuelsen: Tôi đã thêm một cách giải quyết khác, một bản hack cứng của mã CSJS. Chỉ cần thêm khối tập lệnh vào trang của bạn. Hi vọng điêu nay co ich. –

Các vấn đề liên quan