你有不同的可能性这样做。一种可能性是在客户端进行;这是我将在这里描述的解决方案:
创建一个包含这些行的表:
- ID:长列
- 名称:字符串列
- 姓氏:字符串列
- 管理员:布尔列(不可显示)
- 主持人:布尔列(不可显示)
- 编辑器:布尔列(不可显示)
- 运算符:布尔列(不可显示)
- 作用:字符串列,从表数据中忽略(在formData或TablePageData中)
在此示例中,表位于 TableField 中,但它对 TablePage 的工作方式完全相同。
@Order(10.0)
@FormData(sdkCommand = FormData.SdkCommand.USE, value = AbstractTableFieldBeanData.class, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE)
public class PersonsTableField extends AbstractTableField<PersonsTableField.Table> {
@Override
protected int getConfiguredGridH() {
return 5;
}
@Override
protected int getConfiguredGridW() {
return 2;
}
@Override
protected String getConfiguredLabel() {
return TEXTS.get("Persons");
}
@Order(10.0)
public class Table extends AbstractExtensibleTable {
public NameColumn getNameColumn() {
return getColumnSet().getColumnByClass(NameColumn.class);
}
public SurnameColumn getSurnameColumn() {
return getColumnSet().getColumnByClass(SurnameColumn.class);
}
public ModeratorColumn getModeratorColumn() {
return getColumnSet().getColumnByClass(ModeratorColumn.class);
}
public EditorColumn getEditorColumn() {
return getColumnSet().getColumnByClass(EditorColumn.class);
}
public OperatorColumn getOperatorColumn() {
return getColumnSet().getColumnByClass(OperatorColumn.class);
}
public RolesColumn getRolesColumn() {
return getColumnSet().getColumnByClass(RolesColumn.class);
}
public AdministratorColumn getAdministratorColumn() {
return getColumnSet().getColumnByClass(AdministratorColumn.class);
}
public IdColumn getIdColumn() {
return getColumnSet().getColumnByClass(IdColumn.class);
}
@Order(10.0)
public class IdColumn extends AbstractLongColumn {
@Override
protected String getConfiguredHeaderText() {
return TEXTS.get("id");
}
}
@Order(20.0)
public class NameColumn extends AbstractStringColumn {
@Override
protected String getConfiguredHeaderText() {
return TEXTS.get("Name");
}
}
@Order(30.0)
public class SurnameColumn extends AbstractStringColumn {
@Override
protected String getConfiguredHeaderText() {
return TEXTS.get("Surname");
}
}
@Order(40.0)
public class AdministratorColumn extends AbstractBooleanColumn {
@Override
protected boolean getConfiguredDisplayable() {
return false;
}
}
@Order(50.0)
public class ModeratorColumn extends AbstractBooleanColumn {
@Override
protected boolean getConfiguredDisplayable() {
return false;
}
}
@Order(60.0)
public class EditorColumn extends AbstractBooleanColumn {
@Override
protected boolean getConfiguredDisplayable() {
return false;
}
}
@Order(70.0)
public class OperatorColumn extends AbstractBooleanColumn {
@Override
protected boolean getConfiguredDisplayable() {
return false;
}
}
@Order(80.0)
@ColumnData(SdkColumnCommand.IGNORE)
public class RolesColumn extends AbstractStringColumn {
@Override
protected String getConfiguredHeaderText() {
return TEXTS.get("Roles");
}
@Override
protected void execDecorateCell(Cell cell, ITableRow row) throws ProcessingException {
cell.setText(StringUtility.join(", ",
BooleanUtility.nvl(getAdministratorColumn().getValue(row)) ? TEXTS.get("Administrator") : null,
BooleanUtility.nvl(getModeratorColumn().getValue(row)) ? TEXTS.get("Moderator") : null,
BooleanUtility.nvl(getEditorColumn().getValue(row)) ? TEXTS.get("Editor") : null,
BooleanUtility.nvl(getOperatorColumn().getValue(row)) ? TEXTS.get("Operator") : null
));
}
}
}
}
注意中的execDecorateCell
实现RolesColumn
。文本的计算取决于不可见列中包含的值。还要注意ColumnData
此列顶部的注释。
4 个不可见列的属性Displayable
设置为false
。
在服务器上,如果你想放一些数据,你可以这样做:
PersonsTable tableData = formData.getPersonsTable();
PersonsTableRowData rowData = tableData.addRow();
rowData.setId(42L);
rowData.setName("John");
rowData.setSurname("Johnny");
rowData.setAdministrator(Boolean.TRUE);
rowData.setModerator(Boolean.TRUE);
rowData.setEditor(Boolean.FALSE);
rowData.setOperator(Boolean.FALSE);
请注意,客户端中没有rowData.setRoles(String)
或rowData.getRoles()
因为@ColumnData(SdkColumnCommand.IGNORE)
。
当然,我认为您想使用 SQL 语句来执行此操作。你会以这样的方式结束:
SQL.selectInto("SELECT " +
" id, " +
" name, " +
" surname, " +
" administrator, " +
" moderator, " +
" editor, " +
" operator " +
" FROM persons " +
" INTO " +
" :{personsTable.id}, " +
" :{personsTable.name}, " +
" :{personsTable.surname}, " +
" :{personsTable.administrator}, " +
" :{personsTable.moderator}, " +
" :{personsTable.editor}, " +
" :{personsTable.operator}",
formData);
这是我的结果:
