格式化Wicket TextFields的最佳做法是什么?例如,我希望货币字段有符号和逗号。我已经使用IConverter实现创建了一个解决方案,它有点工作。但是,我对焦点行为不满意。我希望在焦点上删除格式。我怎样才能做到这一点?
答案 0 :(得分:1)
使用jQuery插件。我不会在Wicket这样做。看看谷歌的“jquery数字格式插件”或类似的东西。几个例子:
http://www.decorplanit.com/plugin/
http://opensource.teamdf.com/number/examples/demo-as-you-type.html
请注意,此插件可能会干扰您在组件中使用的AjaxBehaviors
。只需尝试一下,看看哪个适合您的需求。
答案 1 :(得分:1)
您可以创建自定义行为:
public class CurrencyFormattingBehavior extends Behavior{
private static final long serialVersionUID = -4754030237711643182L;
private final String format;
public CurrencyFormattingBehavior(final String format){
this.format = format;
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
String script = "var currencyInputField = $('#"+component.getMarkupId()+"');"
+ "currencyInputField.on('focus', function(){"
+ "currencyInputField.val(currencyInputField.val().replace('"+format+"', ''));"
+ "});"
+ "currencyInputField.on('blur', function(){"
+ "currencyInputField.val(currencyInputField.val() + '"+format+"')"
+ "});";
response.render(OnDomReadyHeaderItem.forScript(script));
}
}
然后将其用于任何文本字段:
public class HomePage extends WebPage {
private final String testString = "";
public HomePage(final PageParameters parameters) {
super(parameters);
TextField<String> textField = new TextField<String>("text", new PropertyModel<String>(this, "testString"));
add(textField);
textField.add(new CurrencyFormattingBehavior(" €"));
}
}
但这只是一个非常快速而简单的例子。对于更高级的格式,我建议使用正则表达式。