2010-11-05 6 views
2

J'utilise GWT 2.1.0cellule qui doit Spécifier recevra ensuite dans un CellTable

Je CellTable une population avec des colonnes qui utilisent des cellules pour modifier différents types de valeurs (par exemple, date, chaîne, etc.) . Je veux que l'utilisateur puisse cliquer dans une cellule, taper une valeur et appuyer sur Entrée pour aller directement à l'édition de la cellule suivante, ou sur l'onglet pour passer directement à l'édition de la cellule suivante.

J'ai regardé à travers les interfaces Cell et CellTable, mais je ne trouve rien qui semble pertinent. Comment puis-je obtenir cet effet?

Répondre

2

J'avais une exigence similaire et je ne pouvais pas trouver une solution prête à l'emploi. J'ai fini par sous-classer TextInputCell et ajouter le support tabIndex moi-même.

Voici quelques morceaux de la sous-classe (espérons qu'elle sera compilée, trop paresseuse pour vérifier). Malheureusement, je ne peux pas publier toute la sous-classe, car elle a beaucoup d'autres choses qui ne sont pas liées à la question actuelle. Cette solution prend soin de tabulation à la cellule suivante, mais pour entrer dans le support, vous devrez peut-être remplacer onBrowserEvent.

public class EditTextInputCell extends TextInputCell 
{ 
    int startTabIndex; 

    interface TabbedTemplate extends SafeHtmlTemplates 
    { 
     @Template("<input type=\"text\" value=\"{0}\" tabindex=\"{1}\" class=\"{2}\" title=\"{3}\"></input>") 
     SafeHtml input(String value, String tabindex, String styleClass, String title); 
    } 

    private static TabbedTemplate template; 

    public EditTextInputCell(int startTabIndex) 
    { 
     this.startTabIndex = startTabIndex; 
    } 

    @Override 
    public boolean isEditing(Context context, Element parent, String value) 
    { 
     return true; 
    } 

    @Override 
    public void render(Context context, String value, SafeHtmlBuilder sb) 
    { 
     // Get the view data. 
     Object key = context.getKey(); 
     ValidationData viewData = getViewData(key); 
     if (viewData != null && value.equals(viewData.getCurrentValue())) 
     { 
      clearViewData(key); 
      viewData = null; 
     } 

     String strToDisp = (viewData != null && viewData.getCurrentValue() != null) ? viewData.getCurrentValue() : value; 
     String tabIndex = "" + startTabIndex + context.getIndex() + context.getColumn(); 
     boolean invalid = (viewData == null) ? false : viewData.isInvalid(); 
     String styleClass = "cellTableCell-valid"; 
     String errorMessage = ""; 
     if (invalid) 
     { 
      styleClass = "cellTableCell-invalid"; 
      errorMessage = viewData.getMessage(); 
     } 

     if (strToDisp != null) 
     { 
      SafeHtml html = SimpleSafeHtmlRenderer.getInstance().render(strToDisp); 
      // Note: template will not treat SafeHtml specially 
      sb.append(getTemplate().input(html.asString(), tabIndex, styleClass, errorMessage)); 
     } 
     else 
     { 
      sb.appendHtmlConstant("<input type=\"text\" tabindex=\"" + tabIndex + "\" class=\"" + styleClass + "\" title=\"" + errorMessage + "\"></input>"); 
     } 
    } 
     private TabbedTemplate getTemplate() 
    { 
     if (template == null) 
     { 
      template = GWT.create(TabbedTemplate.class); 
     } 

     return template; 
    }} 
Questions connexes