2

如果用户无权阅读它,我想为我的一些网格列构建一个自定义渲染器以隐藏文本。即使用户无法读取数据,仍然可以访问数据仍然很重要。所以我写了一个自定义渲染器,如下所示:

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());

网格不再显示任何包含字符串的列。

我真的不知道我做错了什么,但我认为这可能与连接器注释没有按预期工作有关,因为当我尝试调试客户端逻辑时,它甚至没有被调用。有人可以指出我缺少哪些步骤吗?

亲切的问候,法比安

4

0 回答 0