Как связать индексированные поля DataModel, чтобы иметь гибкую сетку - PullRequest
0 голосов
/ 27 января 2012

Я хочу иметь возможность отображать таблицу, пока число некоторых дополнительных столбцов неизвестно, пока я не использую метод onRender(), основанный на типе определенных данных.

У меня есть этот класс

ActivityModel extends BaseDataModel {
  // defines all common setXXX and getXXX needed
}

Моя проблема в том, что, возвращаясь со стороны сервера, модель содержит также некоторые дополнительные поля, которые также должны отображаться в виде столбцов в Grid.способ иметь вид индексированных полей в AcitivityModel, чтобы иметь возможность сделать следующее?: фокус на col.setId("{indexed}");

        List<ActivityParameterModel> parameters = folderModel.getParameters();
    for (ActivityParameterModel param : parameters) {
        ActivityParamType paramType = param.getParamType();
        col = new ColumnConfig();
        col.setHeader(param.getParamName());
        col.setWidth(2);
                    //
                    // the following line is what I'm expecting to do
        col.setId("{indexed}");
        switch (paramType) {
        case N:
            NumberField nf = new NumberField();
            nf.setPropertyEditorType(Integer.class);
            col.setEditor(new CellEditor(nf));
            break;
        case S:
            TextField<String> tf = new TextField<String>();
            col.setEditor(new CellEditor(tf));
            break;
        }
        config.add(col);

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

вот что я сделал, чтобы придумать ситуацию:

Я сохранил в БД переменные параметры, вот сущность:

    @Entity
    @Table(name = "ACTIVITYPARAMETER")
    public class ActivityParameter implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "ACTIVITYPARAMETER_IDACTIVITYPARAMETER_GENERATOR",   sequenceName = "SN_ACTIVITYPARAMETER", 
    allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ACTIVITYPARAMETER_IDACTIVITYPARAMETER_GENERATOR")
@Column(name = "ID_ACTIVITYPARAMETER", unique = true, nullable = false)
private Long idActivityParameter;

@Column(nullable = false, length = 256)
private String paramName;

@Column(nullable = false, length = 256)
private String paramType;

// uni-directional many-to-one association to Activitysetting
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ACTIVITYSETTING_ID", nullable = false)
private ActivitySetting activitySetting;

@Column(name = "PARAMORDER", nullable = false)
private Long order;

@Column(name = "PARAMMANDATORY", nullable = false, precision = 1)
@TypeConverter(name = "booleanToNumberConverter", dataType = BigDecimal.class, objectType = Boolean.class)
private boolean mandatory;

во время создания сетки, я создал фиксированные столбцы, затем сделал цикл для построения переменных параметров, используя просто set (paramName, DEFAULT_VALUE) следующим образом:

        // Extra Fields
    List<ActivityParameterModel> parameters = folderModel.getParameters();
    int index = 1;
    for (ActivityParameterModel param : parameters) {
        String columnId = "param" + (index++);
        col = new ColumnConfig(columnId, param.getParamName(), 90);
        NumberField nf = new NumberField();
        col.setEditor(new CellEditor(nf));
        ActivityParamType paramType = param.getParamType();
        switch (paramType) {
        case N:
            nf.setValidateOnBlur(true);
            break;
        }
        config.add(col);
    }

создает дополнительные столбцы, и во время отправки я восстанавливаю значения, повторяя цикл по списку параметров и вызывая get (paramName) для восстановления значения.

0 голосов
/ 27 января 2012

Визуализируйте сетку со стандартной конфигурацией, и когда вы знаете, как ваша сетка должна выглядеть для определенной конфигурации, измените ее и layout () ... за считанные миллисекунды конечный пользователь не будет затронут.

...