spring-mvc + jpa: привязка данных - PullRequest
       13

spring-mvc + jpa: привязка данных

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

У меня есть простое приложение, которое управляет футбольными командами и матчами.Я использую JPA, в форме editMatch.jsp у меня есть свойство team_1, team_2 (экземпляр класса Team) для выбора команды из списка.Проблема заключается в том, что при редактировании совпадений team_1 и team_2 не выбираются в списке, а после отправки сообщения об ошибке появляется: Свойство team_1 вызвала исключение;Вложенное исключение - java.lang.NullPointerException.В контроллере я связываю team_1, team_2 и полагаю, что ошибка где-то между связыванием и инициализацией формы.

editMatch.jsp

  <form:select path="team_1">
       <form:options items="${teamList}" itemLabel="name" itemValue="id"/>
  </form:select>

EditMatchController

public class EditMatchController extends SimpleFormController {
private MatchManager manager;
public EditMatchController() {}

@Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {


    Match match = (Match)binder.getTarget();
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    try{
        binder.registerCustomEditor(Date.class, "datum", new CustomDateEditor(sdf, false));
    } catch(Exception e){}

    binder.registerCustomEditor(Team.class,  new TeamPropertyEditor());
    binder.registerCustomEditor(Team.class,  new TeamPropertyEditor());

}

@Override
protected Map referenceData(HttpServletRequest request) throws Exception {
    Map<Object, Object> dataMap = new HashMap<Object, Object>();
    dataMap.put("teamList", manager.getTeams());
    return dataMap;
}

@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception {
    int idMatch = Integer.parseInt(request.getParameter("id"));
    Match match_d = manager.getMatchById(idMatch);
    if (match_d == null) {
        throw new GenericException("Neplatný záznam.");
    }
    return match_d;
}


@Override
protected ModelAndView onSubmit(
        HttpServletRequest request,
        HttpServletResponse response,
        Object command,
        BindException errors) throws Exception {
    Match match = (Match)command;
    manager.updateMatch(match);
    RedirectView redirect = new RedirectView(getSuccessView());
    return new ModelAndView(redirect).addObject("message", match);
}

public void setManager(MatchManager manager) {
    this.manager = manager;
}

}

TeamPropertyEditor

public class TeamPropertyEditor extends PropertyEditorSupport {

private MatchManager manager;

public void setManager(MatchManager manager) {
    this.manager = manager;
}


@Override
public void setAsText(String text) throws IllegalArgumentException {
    if (text != null && text.length() > 0) {
            try {
                    Team team = this.manager.getTeamById(new Integer(text));
                    super.setValue(team);
            } catch (NumberFormatException ex) {
                    throw new IllegalArgumentException();
            }
    } else {
            super.setValue(null);
    }
}

@Override
public String getAsText() {
    Team team = (Team) super.getValue();
    return  (team != null ? (team.getId()+"").toString(): "");
}

}

edit:

errors.getFieldError ("team_1"):

Ошибка поля в объекте 'match' в поле 'team_1': отклоненное значение [6];коды [methodInvocation.match.team_1, methodInvocation.team_1, methodInvocation.model.Team, methodInvocation];Аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: codes [match.team_1, team_1];аргументы [];сообщение по умолчанию [team_1]];сообщение по умолчанию [Свойство 'team_1' вызвало исключение;Вложенным исключением является java.lang.NullPointerException]

1 Ответ

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

Вы создаете экземпляр TeamPropertyEditor, но не вызываете setManager() для него, поэтому его поле manager равно null, поэтому вы получаете NPE при попытке вызвать manager.getTeamById(...).

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