2011-03-20 38 views

回答

1

通常GWT被認爲是一個web應用框架,它不同於一個widget框架。就我個人而言,我認爲GWT太重,不能僅僅向簡單的網頁添加自動推薦,而是使用諸如jQuery autocomplete之類的東西。

話雖如此,運行GWT代碼沒有什麼神奇的。遵循GWT標準模塊佈局,只需將您的JSP頁面設置爲GWT host page,您可以將路徑更改爲編譯模塊的絕對路徑。

+0

我發現怎麼做純JSP自動完成http://todotomorrow.blogspot.com/2005/06/ajax-autocompletion.html另一篇文章 – user75ponic 2011-03-24 12:06:17

0

這裏是我如何能夠得到一個建議框工作的例子。我在用戶輸入時對數據庫進行RPC調用。

我同意你可以在jQuery中做類似的事情,但爲什麼當GWT有可用的部件?

希望這會有所幫助!

enter image description here

vendorSuggestBox = new SuggestBox(new SuggestionOracle()); //client package 

public class SuggestionOracle extends SuggestOracle { //shared package 

public boolean isDisplayStringHTML() { 
    return true; 
} 

@SuppressWarnings("unchecked") 
public void requestSuggestions(Request request, Callback callback) { 
    ItemMovementRemoteServiceAsync service=GWT.create(ItemMovementRemoteService.class); 
    service.getVendors(request, new SuggestionCallback(request,callback)); 
} 

@SuppressWarnings("unchecked") 
class SuggestionCallback implements AsyncCallback { 
    private SuggestOracle.Request req; 
    private SuggestOracle.Callback callback; 

    public SuggestionCallback(SuggestOracle.Request _req, SuggestOracle.Callback _callback) { 
     req=_req; 
     callback=_callback; 
    } 

    public void onFailure(Throwable caught) { 
     callback.onSuggestionsReady(req, new SuggestOracle.Response()); 
    } 

    public void onSuccess(Object result) { 
     callback.onSuggestionsReady(req, (SuggestOracle.Response) result); 
    } 

} 



public SuggestOracle.Response getVendors(Request req) { //server package 
    Connection db=null; 
    PreparedStatement ps=null; 
    ResultSet rs=null; 
    SuggestOracle.Response resp = new SuggestOracle.Response(); 
    List<Suggestion> suggestions=new ArrayList<Suggestion>(); 
    int count=0; 

    try { 
     db=Database.open("ACM0"); 
     ps=db.prepareStatement(
      " SELECT VE_CD,upper(VE_NAME) VE_NAME" + 
      " FROM AP.VE_WEB " + 
      " WHERE (VE_NAME NOT LIKE 'AC Moore%') " + 
      " AND (lower(VE_NAME) LIKE ? OR VE_CD LIKE ?)" + 
      " ORDER BY VE_NAME"); 
     ps.setString(1, "%"+req.getQuery().toLowerCase()+"%"); 
     ps.setString(2, "%"+req.getQuery().toLowerCase()+"%"); 
     rs=ps.executeQuery(); 
     while(rs.next() && count < 25) { 
      suggestions.add(new ASuggestion(rs.getString("VE_NAME").trim()+"-"+rs.getString("VE_CD").trim())); 
      count++; 
     } 
     resp.setSuggestions(suggestions); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } finally { 
     Database.close(db); 
    } 
    return resp; 
} 



public class ASuggestion implements IsSerializable, Suggestion { //shared package model object 

private String s; 

public ASuggestion(){} 
public ASuggestion(String s) { 
    this.s=s; 
} 

public String getDisplayString() { 
    return s; 
} 

public String getReplacementString() { 
    return s; 
}