Внутренний идентификатор объекта сохранить в Spring 3 - PullRequest
0 голосов
/ 16 января 2012

Я хочу сохранить Деревенский объект через спящий режим, где необходимо сохранить уже сохраненный идентификатор района.Я заселил район объекта в выпадающем списке.Я кодировал аналогичную работу весной 2, но весной 3 она не работает.

здесь, если я регистрирую village.getDistrict () в POST, идентификатор устанавливается точно так же, как и в раскрывающемся списке, но другое значение объекта района равно нулю.

@SessionAttributes({"village"})
@Controller
public class VillageController{

    @Autowired(required=true)
    private AddressService addressService;



   @RequestMapping(value="/cp/village.html", method = RequestMethod.GET)
    public String setForm(ModelMap model) {

    Village village = new Village();    
    village.setDistrict(new District());

    model.addAttribute("village", village);
    return "/cp/village";
    }
    @ModelAttribute("districtList")
    public List<District> populateDistrictList() {
    return addressService.getDistrictList();
    }



 @RequestMapping(value="/cp/village.html", method = RequestMethod.POST)
    public String getForm(@ModelAttribute("village") Village village,               
                BindingResult result, 
                SessionStatus status) {

    log.debug("============================="+village.getDistrict());

    addressService.saveVillage(village);
    status.setComplete(); 

    return "redirect:/cp/village.html123";
    }
}

В JSP:

<form:form commandName ="village" action="village.html" >
      <div>
    <label><fmt:message key="location.district"/></label>
    <form:select path="district.id">
      <form:options items="${districtList}" itemValue="id" itemLabel="districtName"/>
    </form:select>
      </div>

      <div>
    <label><fmt:message key="location.village"/></label>
    <form:input path = "villageName" />    
      </div>


      <div>
    <label><fmt:message key="prompt.remarks"/></label>
    <form:textarea path = "remarks" rows="2" cols="50"/>
      </div>


    <div class = "button-area">
      <input type = "submit" value="Save" class="submit-button" />
      <input type = "button" value="Cancel" onclick="window.location='commonComplaintList.html'" class="submit-button" /> 
    </div>

    <br/>
  </form:form>

Ответы [ 2 ]

1 голос
/ 16 января 2012

Вы не устанавливаете никакого значения в объекте District, поэтому он пуст.

Если вы ожидали, что в округе есть значения объектов из List<District> populateDistrictList(), то я должен сказать: это не такработать из коробки.

Один из способов сделать это - реализовать Converter , который преобразует строку (идентификатор) в объект District, загружая ее из базы данных.

0 голосов
/ 29 января 2012

Я думаю, вам нужно реализовать конвертер для объекта District.Поскольку конвертер для вашего класса сущностей Деревня, скорее всего, вообще не вызывается во время POST (по крайней мере, для новых деревень, поскольку у них нет идентификатора).Кроме того, даже если бы он назывался «Район», ему все равно потребуется конвертер, чтобы получить правильный район из Hibernate.В противном случае Spring просто выдаст вам новый экземпляр District с идентификатором, установленным в значение в select.

Однако, если вы собираетесь спасти Деревню, я не уверен, нужно ли вам на самом деле получить весь объект District из Hibernate.Я думаю (не уверен на 100% в этом, так как прошло некоторое время с тех пор, как я использовал Hibernate и Spring), что Hibernate будет связывать деревню, которую вы создаете в вашем POST, с правильным районом, даже если у вас есть объект District с Id. Возможно, вам потребуется указать некоторые аннотации каскадирования, чтобы они не перезаписывали другие свойства объектов District.
EDIT: немного посмотрел, и я думаю, что вы должны аннотировать свойство district класса Village.с чем-то вроде:

@Column(name = "district", insertable = false)

Таким образом, Hibernate будет знать, что не нужно добавлять новые районы при сохранении новой Деревни.
Опять не уверен насчет этой последней части, но стоит быстрой попытки:)

...