我正在使用eclipse侦察兵!现在我要列出所有用户!多数民众赞成,但我的数据库结构是这样的:
+----+--------+-----------+---------------+-----------+--------+----------+
| ID | Name | Surname | Administrator | Moderator | Editor | Operator |
+----+--------+-----------+---------------+-----------+--------+----------+
| 1 | myname | mysurname | 1 | 1 | 0 | 0 |
+----+--------+-----------+---------------+-----------+--------+----------+
所以,当我填充表格时,我需要显示单个用户的所有角色!例如:如果用户“test”具有管理员,主持人的角色,则表行必须如下所示:
╔════╦═════════════╦══════════╦══════════════════════════╗
║ ID ║ Usernameame ║ Password ║ Roles ║
╠════╬═════════════╬══════════╬══════════════════════════╣
║ 1 ║ test ║ test ║ administrator, moderator ║
╚════╩═════════════╩══════════╩══════════════════════════╝
这样做的最佳方式是什么?
答案 0 :(得分:0)
你有不同的可能性。一种可能性是在客户端进行;这是我将在这里描述的解决方案:
创建一个包含这些行的表:
在此示例中,表位于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);
这是我的结果: