为密码动态自定义 SmartGwt ListGrid
Customize SmartGwt ListGrid dynamically for passwords
我的配置屏幕有一个 com.smartgwt.client.widgets.grid.ListGrid
。
我有 3 个 ListGridFields name、value、isHidden.
如果 isHidden 为真,我想使用 PasswordItem,如果 isidden[,我想使用 TextItem =26=] 是错误的。
如何自定义网格?
我尝试使用 setEditorCustomizer,但它只在我编辑单元格时有效。在查看模式下,我可以看到文本。
我不认为有一种方法可以做你想做的事(在可视化 ListGrid 的字段时显示 PasswordItem 编辑器)。正如您已经发现的,setEditorCustomizer 仅在编辑模式下有效。
但您可以屏蔽字段值。操作方法如下:
// 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);
请记住,如果您隐藏值(或使用 PassowrdItem),'expert' 用户可以看到该值,因为服务器 正在 发送对客户的价值。
如果您确实有安全约束,您可以使用 DataSourceField.viewRequires,它接受速度表达式。
我的配置屏幕有一个 com.smartgwt.client.widgets.grid.ListGrid
。
我有 3 个 ListGridFields name、value、isHidden.
如果 isHidden 为真,我想使用 PasswordItem,如果 isidden[,我想使用 TextItem =26=] 是错误的。
如何自定义网格?
我尝试使用 setEditorCustomizer,但它只在我编辑单元格时有效。在查看模式下,我可以看到文本。
我不认为有一种方法可以做你想做的事(在可视化 ListGrid 的字段时显示 PasswordItem 编辑器)。正如您已经发现的,setEditorCustomizer 仅在编辑模式下有效。
但您可以屏蔽字段值。操作方法如下:
// 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);
请记住,如果您隐藏值(或使用 PassowrdItem),'expert' 用户可以看到该值,因为服务器 正在 发送对客户的价值。
如果您确实有安全约束,您可以使用 DataSourceField.viewRequires,它接受速度表达式。