如何在不修改原有TablePmo和TableRowPmo前提下隐藏linkki表格列
问题原因分析
你之前尝试的三种方案无效的原因如下:
- 设置
@UITableColumn(width=0):Linkki渲染表格列时默认有最小宽度限制,0值会被强制覆盖为框架预设的最小宽度,仅能让列变窄无法完全隐藏。 - 设置
@UIMoneyField的visible = VisibleType.INVISIBLE:该属性仅控制字段在表单、详情页等场景的可见性,不作用于表格列的生成逻辑。 - 子类重写方法移除
@UITableColumn注解:Linkki扫描PMO注解时会向上递归查找父类的方法注解,只要父类方法标记了@UITableColumn,子类即使移除注解也会被扫描识别。
正确实现方案
方案一(推荐,适配Linkki 1.4及以上版本)
在子类ReducedTableRowPmo重写的getTwo方法上,给@UITableColumn注解添加ignore = true属性,即可直接告诉Linkki扫描列时忽略该方法,不会生成对应列,代码示例:
@Override @UITableColumn(ignore = true) @UIMoneyField(/* 保留原有配置即可 */) public String getTwo() { return super.getTwo(); }
无需修改原有父类代码,改造成本最低。
方案二(适配低版本Linkki)
如果你的Linkki版本没有提供ignore属性,可以同时继承原有TablePmo创建新的ReducedTablePmo,重写getVisibleColumns方法过滤掉目标列即可,代码示例:
public class ReducedTablePmo extends TablePmo { @Override public List<String> getVisibleColumns() { return super.getVisibleColumns().stream() // 列的默认id为getter方法去掉get前缀后首字母小写,此处对应getTwo的id为two .filter(columnId -> !"two".equals(columnId)) .collect(Collectors.toList()); } }
后续使用新的ReducedTablePmo和ReducedTableRowPmo绑定渲染表格即可。
内容的提问来源于stack exchange,提问作者Thorsten
相关产品推荐
相关产品推荐

