jQuery mobile の Slider を、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);