Ошибка проверки Spring 3 - PullRequest
       0

Ошибка проверки Spring 3

2 голосов
/ 24 октября 2010

Я пытаюсь заставить некоторые валидаторы работать с Spring 3. Я получаю сообщение об ошибке:

org.springframework.beans.NotReadablePropertyException: недопустимое свойство 'name' класса бина [java.lang.String]: свойство bean-компонента 'name' не читается или имеет недопустимый метод получения: соответствует ли тип возвращаемого значения метода получения параметру установщика?

У меня такой вопрос?к чему относится эта ошибка.Я считаю, что в методе rejectValue он вызывает getName () для myobj.Это говорит о том, что myobj.getName () не существует?Потому что я могу сказать вам, что это так.В противном случае этот метод даже не скомпилируется.

public void validate(Object target, Errors errors) {
    MyObject myobj = (MyObject)target;

    String name = myobj.getName();
    if(name.length() >100 || name.length() < 10) {
        errors.rejectValue("name", "fieldLength");
    }
}

Вот MyObject:

public class MyObject {

public MyObject() {
    super();
    // TODO Auto-generated constructor stub
}

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

И в моем jsp:

<form:form name="MyForm" commandName="myobj" method="post" action="${testurl}">
    <table id="mytable" width="100%">

    <tbody>
      <tr>
        <td colspan="2">
            <form:errors path="name"/> 
        </td>
      </tr>

    <tr>
        <td>
            Name:
        </td>
        <td>
            <form:input path="name"/>
        </td>


    </tr>

    </tbody>
</table>

Мой контроллер:

@ActionMapping(params="myaction=test")
public void test(@ModelAttribute("myobj") MyObject myobj, BindingResult bindingResult, 
        ActionRequest request, ActionResponse response, SessionStatus sessionStatus)  {
    }
    testValidator.validate(myobj, bindingResult);
    if (!bindingResult.hasErrors()) {
        response.setRenderParameter("myaction", "nextpage");
    } else {
        response.setRenderParameter("myaction", "test");
    }
}

Ответы [ 4 ]

1 голос
/ 24 октября 2010

Досадно, кажется, что код был прав все время. Я наконец запустил maven clean, а затем перестроил и снова развернул, очистив весь кеш и т. Д., И теперь он работает с этим кодом. Я собираюсь изменить его, чтобы попытаться приблизить что-то ближе к тому, что я на самом деле хочу, (вложенные проверки) и посмотреть, что я получу с этим.

1 голос
/ 24 октября 2010

Скорее всего, это говорит о том, что какое-то выражение EL не работает, потому что Spring не может понять, какой тип свойства 'name' основан на сигнатурах getter / setter.Если вы показали нам объявление (всех) методов получения и установки для «имени», возможно, мы можем быть более конкретными.

0 голосов
/ 26 мая 2017

Это случилось со мной в Spring Validator, который постоянно жаловался на два нечитаемых свойства в моем домене POJO.Один был java.lang.Boolean, другой - java.lang.Integer, и у них обоих были обычные обычные методы получения и установки JavaBeans.

После некоторых поисков я обнаружил, что инициализирую логическое свойство с помощью:

@ Value ("T {Boolean.FALSE}")

и свойство Integer с:

@ Value ("0")

Это был остаток предыдущего учебного проекта.В любом случае, после удаления эти надоедливые ошибки нечитаемых свойств прекратились, и валидатор начал выполнять свою работу.

0 голосов
/ 24 октября 2010

I догадываюсь Ваша проблема не имеет отношения к валидации как таковой.Я могу только подозревать, что код, который вы вставляете, не является вашим точным примером, а создан вручную, вдохновленный действительно выполненным кодом.

Должна быть некоторая базовая проблема со свойством MyObject name.Мое личное предположение состоит в том, что геттер определен в суперклассе MyObject, и только сеттер переопределен (или переопределен) в классе MyObject.

В любом случае, лучший совет, который я могу датьдля вас это попытаться извлечь минимальный пример вашего кода и попытаться запустить его.Даже если по каким-то причинам вы не можете поделиться этим примером с нами, вам будет легче найти причину ваших проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...