2017-08-16 1 views
0

Ich habe ein Problem mit Radio gelöst und bekam ein neues. Ich habe meine eigene custome radiogroup Komponente:Wicket lokalen Modell in Radio

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

Und FormComponentPanel, wo ich meine radiogroup setzen

public class OperationDatePanel extends FormComponentPanel<OperationDate> { 
.... 
    @Override 
    protected void onInitialize() { 
     super.onInitialize(); 
     add(new OperationDateRadioGroup("operationDate", getModel())); 
    } 
} 

Das Problem: wenn ich die Wahl Radio in radiogroup innere Veränderung (radiogroup) -Komponente und äußeren (Seite) Modell, ich muss nur RadioGroup-Modell ändern und äußeres Modell durch submit ändern.

+0

Das Problem ist nicht sehr klar. Was genau ist "inner" und was "außen" in den Code-Schnipsel? –

+0

Inneres Mittelmodell in FormComponent und Äußeres ist Modell auf der Seite, die FormComponent-Modell als Teil enthält –

+0

Noch ist das Problem für mich nicht sehr klar. Erwägen Sie, weitere Informationen zu Ihrer Frage hinzuzufügen. –

Antwort

1

Ich denke, dass Problem ist, weil Sie outer(Page) Modell in Ihren OperationDateRadioGroup Konstruktor

add(new OperationDateRadioGroup("operationDate", /*Here you are passing PAGE model*/ getModel())); 

und es funktioniert mit diesem page model passieren. Sie müssen jedes andere Modell zum Konstruktor übergeben und mit diesem Modell arbeiten.