2016-07-28 3 views
1

Ich habe eine com.smartgwt.client.widgets.grid.ListGrid für meine Konfigurationen Bildschirm.
Ich habe 3 ListGridFields Name, Wert, isHidden.
Ich möchte PasswordItem verwenden wenn isHidden wahr ist, und TextItem wenn isidden falsch ist.Anpassen SmartGwt ListGrid dynamisch für Kennwörter

Wie kann ich das Raster anpassen?

Ich habe versucht mit SetEditorCustomizer, aber es funktioniert nur, wenn ich eine Zelle bearbeite. Im Ansichtsmodus kann ich den Text sehen.

Antwort

0

Ich glaube nicht, dass es eine Möglichkeit gibt, das zu tun, was Sie wollen (zeigen Sie den PasswordItem-Editor bei der Visualisierung der ListGrid-Felder an). Wie Sie bereits herausgefunden haben, funktioniert setEditorCustomizer nur im Bearbeitungsmodus.

Aber Sie können die Feldwerte maskieren. Hier ist, wie es zu tun:

// very important for not having to set all fields all over again 
// when the target field is customized 
listGrid.setUseAllDataSourceFields(true); 

// customize the isHidden field to make it respond to changes and 
// hide/show the password field accordingly 
ListGridField isHidden = new ListGridField("isHiddenFieldName"); 
isHidden.addChangedHandler(new ChangedHandler() { 
    @Override 
    public void onChanged(ChangedEvent event) { 
     // the name of this field has to match the name of the field you 
     // want to hide (as defined in your data source descriptor, 
     // ListGridField definition, etc). 
     ListGridField passwordField = new ListGridField("passwordFieldName"); 
     if ((Boolean) event.getValue() == true) { 
      passwordField.setCellFormatter(new CellFormatter() { 
       @Override 
       public String format(Object value, ListGridRecord record, int rowNum, int colNum) { 
        return ((String) value).replaceAll(".", "*"); 
       } 
      }); 
     } 
     // you need to re-add here the isHidden field for the ChangeHandler to 
     // be present when recreating the ListGrid 
     listGrid.setFields(isHidden, passwordField); 
     listGrid.markForRedraw(); 
    } 
}); 
// add the customized field to the listGrid, so that we can have the 
// desired ChangeHandler for the isHidden field 
listGrid.setFields(isHidden); 
0

Beachten Sie, dass wenn Sie den Wert (oder verwenden Sie eine PassowrdItem) verstecken, ein ‚Experte‘ Benutzer den Wert sehen konnte, nur weil der Server ist sendet den Wert an den Client.

Wenn Sie tatsächlich eine Sicherheitseinschränkung haben, können Sie DataSourceField.viewRequires verwenden, das Geschwindigkeitsausdrücke akzeptiert.

Verwandte Themen