JSP中的GWT AutoSuggest

时间:2011-03-20 06:19:37

标签: java jsp gwt autosuggest

我想在JSP中添加一个GWT autosuggest文本框。

有人可以对此提供一些见解吗?

由于

2 个答案:

答案 0 :(得分:1)

通常,GWT被认为是与窗口小部件框架不同的Web应用程序框架。我个人认为GWT太重了,只能在一个简单的网页上添加一个自动提示,而是使用像jQuery autocomplete这样的东西。

话虽如此,运行GWT代码并不神奇。遵循GWT标准模块布局,只需将JSP页面设置为GWT host page,您可以在其中更改已编译模块的绝对路径。

答案 1 :(得分: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;
}