在焦点的小门textfield货币格式

时间:2014-01-16 14:32:33

标签: formatting wicket textfield

格式化Wicket TextFields的最佳做法是什么?例如,我希望货币字段有符号和逗号。我已经使用IConverter实现创建了一个解决方案,它有点工作。但是,我对焦点行为不满意。我希望在焦点上删除格式。我怎样才能做到这一点?

2 个答案:

答案 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(" €"));
  }
}

但这只是一个非常快速而简单的例子。对于更高级的格式,我建议使用正则表达式。