2017-08-16 8 views
0

ラジオで1つの問題を解決し、新しいものを取得しました。 私が持っている自分自身の、カスタマーのRADIOGROUPコンポーネント:私は私のラジオグループを置くWicketローカルモデルのラジオ

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

そしてFormComponentPanel

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

問題:私は、内側(RADIOGROUP)成分と外側を変更RADIOGROUPでラジオを選択していたときに(ページ)モデルでは、ラジオグループモデルのみを変更し、外部モデルを送信する必要があります。

+0

問題はあまり明確ではありません。正確に「内部」とは何か、コードスニペットでは「外側」は何ですか? –

+0

FormComponent内の内部平均モデル、outerはFormComponentモデルを含むページ上のモデルです –

+0

まだ問題はあまり明確ではありません。質問にさらに情報を追加することを検討してください。 –

答えて

1

私はあなたのOperationDateRadioGroupコンストラクタ

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

outer(Page)モデルを渡すと、それはこのpage modelで動作するので、その問題があると思います。コンストラクタに他のモデルを渡して、このモデルで作業する必要があります。