Калитка 1.5 не найдена сообщение об ошибке

Я сделал ComponentFeedbackPanel для своих входов, где я отображаю сообщение для компонентов формы. У меня есть входы для смены прохода, где вы вводите свой старый проход, новый проход и повторяете новый проход:

final PasswordTextField oldPass = createOldPassField();
final PasswordTextField newPass = createNewPassField();
final PasswordTextField newPassRepeat = createNewPassRepeatField();

add( oldPass );
add( newPass );
add( newPassRepeat );

final ComponentFeedbackPanel oldPassFeedbackPanel = new ComponentFeedbackPanel(OLD_PASS_ERROR, oldPass);
    oldPassFeedbackPanel.setOutputMarkupPlaceholderTag( true );

final ComponentFeedbackPanel newPassFeedbackPanel = new ComponentFeedbackPanel(NEW_PASS_ERROR, newPass);
    newPassFeedbackPanel.setOutputMarkupPlaceholderTag( true );

final ComponentFeedbackPanel newPassRepeatFeedbackPanel = new ComponentFeedbackPanel(NEW_PASS_REPEAT_ERROR, newPassRepeat);
    newPassRepeatFeedbackPanel.setOutputMarkupPlaceholderTag( true );

add( oldPassFeedbackPanel );
add( newPassFeedbackPanel );
add( newPassRepeatFeedbackPanel );

Это прекрасно работает, когда я использую методы проверки встроенной калитки, например: EqualPasswordInputValidation возвращает красивое сообщение о том, что входные данные не совпадают рядом с одним из компонентов. Однако, когда я создаю собственный класс, который расширяет AbstractValidator и реализует IValidator:

/**
 * Error msgs
 */
private static final String ERROR_WRONG_PASS = "wrong_pass";

(...)

private class UserPassValidator extends AbstractValidator<String> implements IValidator<String>
{
    private static final long serialVersionUID = 1L;

    @Override
    protected void onValidate( IValidatable<String> arg0 )
    {
        final String oldPass = arg0.getValue();
        if ( !user.getCryptedPassword().equals( CypherUtil.encodeMd5( oldPass ) ) )
        {
            error( arg0, ERROR_WRONG_PASS );
        }
    }

}

Я получаю предупреждение, что сообщение об ошибке не может быть найдено:

Could not locate error message for component: PasswordTextField@profileModifyForm:mp-oldpass and error: [ValidationError message=[null], keys=[wrong_pass, EditPassForm$UserPassValidator], variables=[]]. Tried keys: mp-oldpass.wrong_pass, wrong_pass, mp-oldpass.EditPassForm$UserPassValidator, EditPassForm$UserPassValidator.

Я попытался поместить.properties для каждой страницы, которая может быть связана с этой формой, структура страницы выглядит следующим образом:

MainPage
  |
  |---AjaxTabbedPanels (it basically works like from wicket example http://www.wicket-library.com/wicket-examples/ajax/tabbed-panel?1)
          |
          |---ProfilePanel (extends Panel)
              |
              |---editProfileWindow (a Modal Window, opened on button click)
                   |
                   |---ProfileEditPass (extends WebPage, pageCreator for modalWindow)
                       |
                       |---EditPassForm (extends Form<Void>, class for form)
                           |
                           |--oldPass (PasswordTextField)
                           |--newPass (PasswordTextField)
                           |--newPassRepeat( PasswordTextField)
                           |--oldPassFeedbackPanel (ComponentFeedbackPanel)
                           |--...and so on for the rest

Комбинацию для файла.properties я пробовал:

mp-oldpass.wrong_pass = "Wprowadzono błędne hasło"
UserPassValidator = "Wprowadzono błędne hasło"

И файлы свойств, которые я пробовал:

EditPassForm.properties
ProfileEditPass.properties
ProfilePanel.properties
AjaxTabbedPanels.properties
MemberTemplatePage.properties (its basically a template, extended by AjaxTabbedPanels)

1 ответ

Решение

Вы можете добавить следующее в ваш файл log4j.properties для отображения более подробной информации о локализации ресурса:

log4j.logger.org.apache.wicket.resource=DEBUG
log4j.logger.org.apache.wicket.Localizer=DEBUG

При этом вы увидите, какие именно файлы свойств используются. Для валидаторов, YourWicketAppClass.properties в той же папке / пакете, что и ваш YourWicketAppClass класс должен работать.

Другие вопросы по тегам