来自数据库的自定义wicket表单验证器消息

时间:2011-06-23 15:09:11

标签: java wicket

我在appliation startup上加载了自己的wicket(1.5.x)自定义字符串加载器,它从我的数据库中的字典表中提取数据。

现在当我使用这个加载器时,尽管加载了默认的字符串加载器;在我的验证文本中,它没有显示$ {component}标签,如用户名/密码。它就像“字段''是必需的”,其中提交的名称仍为空。我怎么能解决这个问题?

我尝试了一种解决方案。这是我的代码:

1)我在Application类中加载了我的String loader:

  getResourceSettings().getStringResourceLoaders().add(0,
            new ClassStringResourceLoader(MyApplication.class));

    getResourceSettings().getStringResourceLoaders()
       .add(1, new DictionaryLoader((IDicitureService)
        applicationContext.getBean(IDicitureService.class)));

此处DictionaryLoader只是IStringResourceLoader的实现。

2)在我的登录表单中,我添加了我的用户名和密码字段,如下所示:

    final FeedbackPanel feedback = new FeedbackPanel("feedback");
    feedback.setOutputMarkupId(true);
    form.add(feedback);
    form.add(new FormComponentFeedbackBorder("username_border")
            .add(new RequiredTextField("username",String.class)
                    .setLabel(new StringResourceModel("COMP:0:0", this, null))));
    form.add(new FormComponentFeedbackBorder("password_border").
            add(new PasswordTextField("password")
                    .setLabel(new StringResourceModel("COMP:1:0", this, null))));
    add(form);

其中new StringResourceModel("COMP:1:0", this, null)只返回一个字符串,如username ... password等。

现在,如果我检查我的页面,当我使用TextField.setLabel()实际上是用于验证器标签时,它会用我提供的文本替换验证器内容。但我这里没有使用$ {label}。

这是一个很好的方法吗?或者它可以用其他方式完成。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以发布'COMP:0:0'和'COMP:1:0'消息键的值吗?

默认情况下,你应该使用与wicket相同的语法:

Required=Field '${label}' is required.

$ {label}是实际标签(如果设置了一个)或字段ID(如果没有设置标签)。