首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无线电中的Wicket本地模型

无线电中的Wicket本地模型
EN

Stack Overflow用户
提问于 2017-08-16 19:53:11
回答 1查看 57关注 0票数 0

我用无线电解决了一个问题,换了一个新的。我有自己的客户radioGroup组件:

代码语言:javascript
复制
public class OperationDateRadioGroup extends RadioGroup<OperationDate> {

    private LocalDatePicker date;
    private LocalDatePicker from;
    private LocalDatePicker to;
    public OperationDateRadioGroup(String id, IModel<OperationDate> model) {
        super(id, model);
    }

    @Override
    protected void onInitialize() {
        super.onInitialize();
        operationDateType = getModelObject().getOperationDateType();

        date = new LocalDatePicker("date", new CompoundPropertyModel<>(getModel()).bind("date")) {

            @Override
            protected void onConfigure() {
                super.onConfigure();
                setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.DATE);
            }
        };
        from = new LocalDatePicker("interval.from", new CompoundPropertyModel<>(getModel()).bind("interval.from")) {

            @Override
            protected void onConfigure() {
                super.onConfigure();
                setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.INTERVAL);
            }
        };
        to = new LocalDatePicker("interval.to", new CompoundPropertyModel<>(getModel()).bind("interval.to")) {

            @Override
            protected void onConfigure() {
                super.onConfigure();
                setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.INTERVAL);
            }
        };

        OperationDate operationDate = new OperationDate();
        operationDate.setOperationDateType(OperationDateType.DATE);
        Radio dateType = new Radio<>("dateType", Model.of(operationDate));
        OperationDate operationInterval = new OperationDate();
        operationInterval.setOperationDateType(OperationDateType.INTERVAL);
        Radio intervalType = new Radio<>("intervalType", Model.of(operationInterval));

        dateType.add(new AjaxFormSubmitBehavior("onchange") {
            private static final long serialVersionUID = -6001312248222404593L;

            @Override
            protected void onEvent(AjaxRequestTarget ajaxRequestTarget) {
                ajaxRequestTarget.add(date, from, to);
            }
        });

        intervalType.add(new AjaxEventBehavior("onchange") {
            private static final long serialVersionUID = -6001312248222404593L;

            @Override
            protected void onEvent(AjaxRequestTarget ajaxRequestTarget) {
                ajaxRequestTarget.add(date, from, to);
            }
        });

        add(dateType, intervalType);
        add(date.setOutputMarkupId(true));
        add(from.setOutputMarkupId(true));
        add(to.setOutputMarkupId(true));
        add(new AjaxFormChoiceComponentUpdatingBehavior() {
            @Override
            protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) {

            }
        });
        getForm().add(new DateIntervalFormValidator(this, date, from, to));
    }
}

我把radioGroup放在FormComponentPanel的地方

代码语言:javascript
复制
public class OperationDatePanel extends FormComponentPanel<OperationDate> {
 ....
    @Override
    protected void onInitialize() {
        super.onInitialize();
        add(new OperationDateRadioGroup("operationDate", getModel()));
    }
}

问题:当我在页面更改内部( radioGroup )组件和外部( radioGroup )模型中选择radio时,我只需要更改radioGroup模型,而通过提交更改外部模型。

EN

回答 1

Stack Overflow用户

发布于 2017-08-21 20:58:50

我认为,这个问题是因为您将outer(Page)模型传递到OperationDateRadioGroup构造函数中

代码语言:javascript
复制
add(new OperationDateRadioGroup("operationDate", /*Here you are passing PAGE model*/ getModel()));

它可以和这个page model一起工作。您需要将任何其他模型传递给构造函数并使用此模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45712848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档