jQuery mobile の Slider を、Wicketで、

jQuery mobileSlider を、Wicket で実現するには、RangeTextField を使おうことが一般的と思うが、
以下のように長くなってしまう。

final RangeTextField<Integer> slider = new RangeTextField<Integer>(
      "slider",new Model<Integer>(20)
   ){
   @Override
   public String getMarkupId(){
      return getId();
   }
};
slider.setType(Integer.class);
slider.setOutputMarkupId(true);
slider.add(new AttributeModifier("min","0"));
slider.add(new AttributeModifier("max","100"));


そこで、思いついたのは RangeTextField 継承クラスを用意する。

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.form.RangeTextField;
import org.apache.wicket.model.IModel;
/**
 * JqmSlider
 */

public class JqmSlider<T> extends RangeTextField{
   @SuppressWarnings("unchecked")
   public JqmSlider(String id,IModel<T> model,int min,int max){
      super(id,model);
      add(new AttributeModifier("id",getId()));
      add(new AttributeModifier("min",Integer.toString(min)));
      add(new AttributeModifier("max",Integer.toString(max)));
      Integer v = (Integer)model.getObject();
      add(new AttributeModifier("value",v==null ? "0" : v.toString()));

   }
}

これは、以下のように使う。

HTML が、、、

<div data-role="fieldcontain">
   <label for="slider">倍率(%)</label>
   <input type="range" wicket:id="slider" data-theme="a" />
</div>

この時、、、

JqmSlider<Integer> slider = new JqmSlider<Integer>("slider",new Model<Integer>(20),0,100);