2010-10-23 4 views
0

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

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(): ""); 
} 

}

редактировать:

errors.getFieldError ("TEAM_1"): ошибка

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

+1

Показать полный стек, пожалуйста. – axtavt

ответ

0

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

Смежные вопросы