0

私はEclipseスカウトを使用しています!今、すべてのユーザーを一覧表示したい! それは問題ありませんが、私のデータベース構造は次のようになります。

+----+--------+-----------+---------------+-----------+--------+----------+
| ID |  Name  |  Surname  | Administrator | Moderator | Editor | Operator |
+----+--------+-----------+---------------+-----------+--------+----------+
|  1 | myname | mysurname |             1 |         1 |      0 |        0 |
+----+--------+-----------+---------------+-----------+--------+----------+

したがって、テーブルにデータを入力するときは、1 人のユーザーのすべてのロールを表示する必要があります。例: ユーザー「test」に管理者、モデレーターの役割がある場合、表の行は次のようにする必要があります。

╔════╦═════════════╦══════════╦══════════════════════════╗
║ ID ║ Usernameame ║ Password ║          Roles           ║
╠════╬═════════════╬══════════╬══════════════════════════╣
║  1 ║ test        ║ test     ║ administrator, moderator ║
╚════╩═════════════╩══════════╩══════════════════════════╝

これを行う最善の方法は何ですか?

4

1 に答える 1

0

これを行う可能性はさまざまです。1 つの可能性は、クライアント側で行うことです。これが私がここで説明する解決策です:

これらの行を含むテーブルを作成します。

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

ここに私の結果があります:

MyForm の例 - Eclipse スカウト

于 2015-04-02T20:50:46.263 に答える