2013-08-24 2 views
0

우리의 응용 프로그램에서는 객체의 데이터베이스에 항목을 만든 다음 사용자에게 보내 변경 사항을 적용해야한다는 요구 사항이 있습니다. 아래에 나타낸 바와 같이 - : Spring MVC에서 Object의 상태를 동일하게 유지

@RequestMapping(value = "/addCompany", method = RequestMethod.POST) 
public ModelAndView addCompany(
     @ModelAttribute("company-entity") Company company, 
     BindingResult result) { 
    CompanyService companyService = (CompanyService) applicationContext 
      .getBean("companyService");  
    companyService.saveVersionAsDraft(company, 1110);*/ 
    return new ModelAndView("success"); 
} 

    //Delegate to addPage after making an entry in the database 
@RequestMapping("/companyHome") 
public ModelAndView showCompanyForm() { 
    System.out.println("CompanyController.showContacts()"); 
    CompanyService companyService = (CompanyService) applicationContext 
      .getBean("companyService"); 
    CommonService commonService = (CommonService) applicationContext.getBean("commonService"); 
    Company company = (Company) companyService.addNew(new Company(), 1100); 
    ModelAndView modelAndView = new ModelAndView("company"); 
    modelAndView.addObject("companyCategories", 
      companyService 
       .findAllCompanyCategories()); 
    modelAndView.addObject("sectors", commonService.findAllSectors()); 

    modelAndView.addObject("companyStatus", 
      companyService.findAllCompanyStatuses()); 

    ModelAndView modelAndView = new ModelAndView("company"); 
    modelAndView.addObject("company-entity",company); 

    return modelAndView; 
} 

지금이 회사 객체에 우리는 또한 우리가 회사를 추가에서 사용할 필요가 DB의 기본 키를 전달하는(). 따라서이 기본 키를 양식의 객체와 함께 반환해야합니다. 그렇게 할 방법이 있습니까? 양식에서 숨겨진 필드를 사용할 수 없으므로이 유형의 항목이 6 ~ 7 개 있습니다.

+1

나는 귀하의 질문을 전혀 이해하지 못합니다. 확실한 점은 의존성 주입이 무엇인지 완전히 이해하지 못했다는 것입니다. 컨트롤러에서 서비스를 가져 오기 위해 applicationContext.getBean()을 호출해서는 안된다 : Spring에 의해 주입되어야한다. 구체적인 예를 들어 당신이 달성하고자하는 것을 설명하십시오. –

+0

문제를 완벽하게 해결하는 동안 숨겨진 양식 필드를 사용할 수없는 이유는 무엇입니까? – Bart

+0

'showCompanyForm'에도 결함이 있습니다. 두 개의 ModelAndView 객체를 생성하고 있습니다. 첫 번째 것을 무시하고 새로운 것을 만들고 (회사 만 추가) 반환하십시오. 기본적으로 모든 참조 데이터가 사라졌습니다. –

답변

0

JB Nizet이 말했듯이, 스프링의 핵심을 절대 사용하지 않는 것 같습니다 : 의존성 주입.

당신은 봄이 컨트롤러에서 그런가 someting으로 주입하도록해야
CompanyService companyService = (CompanyService) applicationContext 
     .getBean("companyService"); 

: 그 외에

@Autowired 
private CompanyService companyService; 

, 귀하의 질문에 대해, 당신은 세 가지가 대신 서비스 빈의 직접 GET을 사용 id를 유지하는 옵션. 당신이 그것을 지킬 것이다, 그래서이 항상 URL의 ID를해야합니다 사용

//Delegate to addPage after making an entry in the database 
@RequestMapping("/company/{id}") 
public ModelAndView showCompany(@PathVariable("id") Long id,Model model) { 

: 첫 번째 솔루션합니다 (RestFull 접근 방식에서 영감을) 일부 도메인 개체를 편집 스프링에 의해 제안 된 고전적인 방법을 사용합니다.

두 번째 옵션은 Spring의 'form'태그를 이용하는 경우 사용할 수 있습니다. 폼을 생성해야합니다 : 숨겨진 필드와 그에게 경로 = "yourIdAttribute"를 부여하십시오

세 번째는 비슷하지만 표준 입력 유형 = "숨김"을 만든 다음 someting으로 컨트롤러에서 가져와야합니다 이렇게 :

public ModelAndView showCompany(@RequestParam(value="name_of_your_field") Long id,...) 

자세한 내용이 필요한지 궁금한 점이 있으시면 언제든지 문의하십시오.