2017-10-05 53 views
0

我設置了一個我想用於xe:beanNamePicker的java類。不知何故,我無法將創建的SimplePickerResult添加到結果集中。xe:beanNamePicker,無法從筆記視圖獲取我的值到結果集中

package se.myorg.myproject.app; 

import java.io.IOException; 
import java.util.List; 
import java.util.Properties; 
import java.util.TreeSet; 

import se.sebank.namis.utils.Utils; 

import lotus.domino.Database; 
import lotus.domino.Document; 
import lotus.domino.DocumentCollection; 
import lotus.domino.NotesException; 
import lotus.domino.View; 

import com.ibm.xsp.complex.ValueBindingObjectImpl; 
import com.ibm.xsp.extlib.component.picker.data.INamePickerData; 
import com.ibm.xsp.extlib.component.picker.data.IPickerEntry; 
import com.ibm.xsp.extlib.component.picker.data.IPickerOptions; 
import com.ibm.xsp.extlib.component.picker.data.IPickerResult; 
import com.ibm.xsp.extlib.component.picker.data.SimplePickerResult; 

public class DirectoryNamePicker extends ValueBindingObjectImpl implements INamePickerData { 

    private Utils utils; 

    Properties props; 

    public DirectoryNamePicker(){ 
     //constructor 
     utils = new Utils(); 
     utils.printToConsole(this.getClass().getSimpleName().toString() + " - DirectoryNamePicker() // constructor"); 
     try { 
      props = utils.getDataSourceProperties(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public String[] getSourceLabels() { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    public boolean hasCapability (final int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
    } 

    public List<IPickerEntry> loadEntries (final Object[] arg0, final String[] arg1) { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    @SuppressWarnings("unchecked") 
public IPickerResult readEntries (final IPickerOptions options) { 
    String startKey = options.getStartKey(); 
    int count = options.getCount(); 
    TreeSet<IPickerEntry> entries = new TreeSet<IPickerEntry>(); 
    if (startKey != null) { 
     // User is performing a search 
     try { 
      entries = this.dirLookup(startKey, count); 
     } catch (NotesException e) { 
      System.err.println("Exception trying to perform directory lookup: " + e.getMessage()); 
      e.printStackTrace(); 
     } 
     } 
    return new SimplePickerResult((List<IPickerEntry>) entries, -1); 
    } 

    public TreeSet<IPickerEntry> dirLookup(final String search, final int limit) throws NotesException { 
    TreeSet<IPickerEntry> result = new TreeSet<IPickerEntry>(); 

    String server = props.getProperty("server_notesname"); 
    String filepath = props.getProperty("db_project_data"); 
    Database db = utils.getSession().getDatabase(server, filepath); 

    View vw = db.getView("vw_all_todo_namespicker"); 
    vw.setAutoUpdate(false); 

    DocumentCollection dc = vw.getAllDocumentsByKey(search, false); 
    int count = 0; 
    Document tmpdoc; 
    Document doc = dc.getFirstDocument(); 

    while (doc != null && count < limit) { 
     String person = doc.getItemValueString("app_ProjMgrName"); 
     IPickerEntry entry = new SimplePickerResult.Entry(person, person); 
     result.add(entry); 
     // result.add(entry does not seem to work 
     tmpdoc = dc.getNextDocument(); 
     doc.recycle(); 
     doc = tmpdoc; 
     count = count +1; 
     }  
    vw.setAutoUpdate(true); 
    return result; 
    } 

} 

有沒有人能告訴我我做錯了什麼?我選擇了一個treeset而不是一個arraylist。這是因爲我去了一個有很多多個條目的視圖,所以我不想重複,並按值排序。

+0

如果您在名稱選取器對話框中進行搜索,它會起作用嗎?您的代碼僅在搜索時返回填充結果集。 –

+0

是的,它進行搜索。如果我在文檔集合中打印出大量文檔,我發現它找到了匹配的文檔 –

回答

2

你在該行鑄造TreeSet中,以(列表):

return new SimplePickerResult((List<IPickerEntry>) entries, -1); 

因爲SimplePickerResult需要一個列表(它不會接受一個Collection),但TreeSet中沒有實現列表,以便投將失敗。 您可能必須將其更改回ArrayList。 要進行排序,請嘗試使用java.util.Collections.sort(List list,Comparator c)和自定義比較器來比較entry.getLabel()的值,因爲SimplePickerResult.Entry沒有內置的比較方法。