如果用户无权阅读它,我想为我的一些网格列构建一个自定义渲染器以隐藏文本。即使用户无法读取数据,仍然可以访问数据仍然很重要。所以我写了一个自定义渲染器,如下所示:
package <package>.util.renderer;
import com.vaadin.client.renderers.Renderer;
import com.vaadin.client.widget.grid.RendererCellReference;
import <package>.util.CustomSecurityConstants;
import <package>.BaseUI;
public class BlockedStringRendererClient implements Renderer<String> {
private boolean canReadBlocked = BaseUI.getCurrentPrincipal().get().getAuthorities().contains(CustomSecurityConstants.READ_PERMISSION_BLOCKED);
@Override
public void render(RendererCellReference rendererCellReference, String s) {
if (canReadBlocked) {
rendererCellReference.getElement().setInnerText(s);
} else {
rendererCellReference.getElement().setInnerText("");
}
}
}
然后我按照本教程https://vaadin.com/docs/-/part/framework/clientsidewidgets/clientsidewidgets-grid.html编写了渲染器的服务器端
package <package>.util.renderer;
import com.vaadin.ui.Grid;
public class BlockedStringRendererServer extends Grid.AbstractRenderer<String> {
public BlockedStringRendererServer() {
super(String.class);
}
}
最后是连接这些组件的连接器:
package <package>.util.renderer;
import com.vaadin.client.connectors.AbstractRendererConnector;
import com.vaadin.shared.ui.Connect;
@Connect(BlockedStringRendererServer.class)
public class BlockedStringRendererConnector extends AbstractRendererConnector<String> {
@Override
public BlockedStringRendererClient getRenderer() {
return (BlockedStringRendererClient) super.getRenderer();
}
}
但是现在当我尝试使用如下连接器时:
grunddatenGrid.getColumn("name").setRenderer(new BlockedStringRendererServer());
网格不再显示任何包含字符串的列。
我真的不知道我做错了什么,但我认为这可能与连接器注释没有按预期工作有关,因为当我尝试调试客户端逻辑时,它甚至没有被调用。有人可以指出我缺少哪些步骤吗?
亲切的问候,法比安