2015-04-09 5 views
-1

, когда я вхожу: http://localhost:8080/sys_manager/admin/sys/resource/update/1009 это может войти в этот метод, но значение идентификатора равно нулю ,:весна pathvariable не работает, не может получить значение

@RequestMapping(value = "update/{id}", method = RequestMethod.GET) 
    public String showUpdateForm(@PathVariable("id") ID id, Model model) { 
     M m = baseService.findOne(id); 
     if (permissionList != null) { 
      this.permissionList.assertHasUpdatePermission(); 
     } 
     setCommonData(model); 
     model.addAttribute(Constants.OP_NAME, "修改"); 
     model.addAttribute("m", m); 
     return viewName("editForm"); 
    } 

Одна картина более тысячи слова, вот снимок: https://plus.google.com/photos/109577783306525329699/albums/6135767537581420673

+0

См. Здесь http://stackoverflow.com/questions/5000876/spring-mvc-referencing-params-variable-from-requestmapping – rakeeee

+0

спасибо, я знаю api. Проблема на самом деле в том, что вчера он работал хорошо, я думаю i havn't ничего не изменил об этом классе, и это относительный jsp, – vincent

+0

@vincent Измените pathvariable type на String и повторите попытку. Я думаю, что это сработает –

ответ

0

Самое простое решение изменить действие контроллера, как этот

public String showUpdateForm(@PathVariable("id") Integer id, Model model) { 
.... 

Если вы действительно хотите используйте объект Custom class как PathVariable. то вам необходимо зарегистрировать собственный редактор для вашего контроллера, как показано ниже.

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(ID.class, new PropertyEditorSupport() { 
     @Override 
     public String getAsText() { 
      return ((ID) this.getValue()).toString(); 
     } 

     @Override 
     public void setAsText(String text) throws IllegalArgumentException { 
      setValue(new ID(text)); 
     } 
    }); 
} 

А также обратите внимание, что вам нужно добавить avariable сохранить текстовое значение разобранное внутри этого класса или внутри этого initBinder, по вашему выбору.

+0

извините, 'ID' здесь является общим типом, на самом деле это «Long» при запуске. И я отредактировал его до Long, он тоже не будет работать. Спасибо – vincent

0

Я бы использовал DCA DomainClassConverter Spring Data JPA, таким образом вы сохранили бы поиск findOne, например.

@RequestMapping(value = "update/{id}", method = RequestMethod.GET) 
public String showUpdateForm(@PathVariable("id") M m, Model model) { 

http://docs.spring.io/spring-data/jpa/docs/1.8.0.RELEASE/reference/html/#_domainclassconverter

+0

не работает. Я получаю это: Can not преобразовать значение типа [java.lang.String] в требуемый тип []: не найдено подходящих редакторов или стратегии конверсии – Ashu

1

спасибо всем, я исправила эту проблему, потому что переопределение. супер метод

@RequestMapping(value = "update/{id}", method = RequestMethod.GET) 
public String showUpdateForm(@PathVariable("id") ID id, Model model) { 
    M m = baseService.findOne(id); 
    if (permissionList != null) { 
     this.permissionList.assertHasUpdatePermission(); 
    } 
    setCommonData(model); 
    model.addAttribute(Constants.OP_NAME, "修改"); 
    model.addAttribute("m", m); 
    return viewName("editForm"); 
} 

метод этого подкласса, как удар:

@Override 
public String showUpdateForm(@PathVariable("id") Long id, Model model) { 
    return super.showUpdateForm(id, model); 
} 

будет посещать ребенка "showUpdateForm" (даже если child'method does't имеет @RequestMapping) .My ошибка состоит в том, что я не добавляйте @PathVariable в метод child.

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

  • Нет связанных вопросов^_^