2011-03-20 3 views

Répondre

1

En règle générale GWT est considéré comme un cadre d'application Web qui est différent à un cadre widget. Personnellement, je considèrerais GWT trop lourd pour ajouter simplement un autosuggest à une simple page web et utiliser à la place quelque chose comme jQuery autocomplete. Cela dit, il n'y a rien de magique dans l'exécution du code GWT. Suivez la disposition du module standard GWT et configurez simplement votre page JSP en tant que GWT host page où vous modifiez les chemins pour être absolus à votre module compilé.

+0

Je trouve un autre article sur la façon de faire autocomplete dans jsp plaine http://todotomorrow.blogspot.com/2005/06/ajax-autocompletion.html – user75ponic

0

Voici un exemple de comment j'ai réussi à faire fonctionner une boîte de suggestions. Je fais un appel RPC à la base de données pendant que l'utilisateur tape.

Je suis d'accord que vous pourriez faire quelque chose de similaire dans jQuery mais pourquoi le faire quand GWT a le widget disponible?

Espérons que cela aide!

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