2017-10-20 1 views
0

문제 : 필드에서 개체를 매개 변수로 가져 오는 중입니다.필드 형식에서 개체 가져 오기

코드 : 필드 법인 사용자 : 필드

Long id; 
String name; 
Office office; 

법인 사무실 :

Long id; 
String name; 

newuser.vm

<title>NEW USER</title> 
<body> 
<form method="post" action="/save" property="user"> 
    Name: 
    <input type="text" name="name" path="name"/> <br> 

    Office: 
    <select name="office" path="office"> 
     #foreach($office in $offices) 
      <option value="$office">$office.name</option> 
     #end 
    </select> <br> 
    <input type="submit" value="SAVE"/> 
</form> 
</body> 

그리고 컨트롤러

@Controller 
public class ViewController { 

    @Autowired 
    private UserService userService; 
    @Autowired 
    private OfficeService officeService; 

@RequestMapping(value = "/newuser", method = RequestMethod.GET) 
    public ModelAndView newuser(){ 

     return new ModelAndView("fragments/newuser.vm","command",new User()); 
    } 
@RequestMapping(value = "/save", method = RequestMethod.POST) 
    public ModelAndView save(@ModelAttribute("user") User user){ 

     userService.create(user); 
     return new ModelAndView("redirect:/list"); 
    } 
//Model Attributes 
    @ModelAttribute 
    public void userTypesList(Model model){ 
     model.addAttribute("types", userService.getPositions()); 
    } 
    @ModelAttribute 
    public void officesList(Model model){ 
     model.addAttribute("offices", officeService.getAll(); 
} 

제출 결과에 따라 Office가있는 새 사용자를 필드 중 하나로 가져와야합니다. 그러나 <option value="$office">$office.name</option>은 객체의 문자열 표현을 반환하지만 객체 자체는 반환하지 않습니다. 그래서 나는 그것을/save 컨트롤러로 올바르게 가져올 수있는 방법을 찾아야합니다. Ofcourse Ofcourse 양식에서 필드 데이터로 필드를 가져올 수 있으며 새로운 usery를 만들어 양식에서 office.id를 가져오고 officeById (id)를 가져 오기 위해 SQL에 다른 요청을 보내는 것보다 나쁜 방법 인 것 같습니다. 코딩. 누구든지 도움을받을 수 있습니까?

+0

이것은 답변이 아니지만 질문입니다. 왜 양식을 사용하고 있습니까? 너 심각하다는 뜻이야? –

+0

나는 단지 박을 쳤다. 그래서 나는 정보를 얻을 수있다. 더 나은 해결책이 있으면 말해줘. 내게 말하기는 쉽지만, 코드가 더 좋고/더 쉽고 빠를 때 도움이된다면 기꺼이 다른 것들을 살펴볼 것이다. – Vampirenostra

+0

이미 싫어하는 방식으로 공부하는 대신, 간단한 방법으로 아약스 전화를 배울 수 있습니다. 백엔드와 프론트 엔드를이 접근 방식으로 단단히 연결하지 마십시오. 당신은 이미 학습 단계에 있으므로 봄 MVC와 Angular 2로 시작하는 것이 좋습니다. 기본 지식을 간단한 jQuery로 시작하십시오. ajax 호출은 ajax를 통해 데이터를 보내고 다시 검색합니다. 그런 다음 라이프 사이클을 알게되고이 접근 방식에 익숙해지기 시작합니다. 스프링 MVC를 이미 배우면서 Angular2로 이동하십시오. 행운을 빌어 요 :) –

답변

0

는 당신이 필요로하는 것은 :

ID 필드가 있습니다 무엇
<option value="$office.id">$office.name</option> 

. 양식이 제출 될 때 사무실 ID 만 다시 전송되므로 새 사용자를 생성하는 동안 사무실 테이블에 조인을 채우는 데 필요한 모든 것입니다.

전체 개체 (즉, toString() 메서드)의 문자열 표현을 $office에 표시하려면 예상되는 동작입니다.

+0

그럼 내가 사무실에 가야한다고 생각해. 폼에서 다시 나온거야?하지만 User 객체의 필드는 사무실이야. 시도해 보자. – Vampirenostra

+0

브라우저에서 HTTP 400 Exception이 발생하지 않았다. 컨트롤러에 데이터를 전달할 수있는 양식의 사무실 선택기를 사용하지 않으면 필드가 이상하게 채워진다는 사실을 알게되었습니다. – Vampirenostra

+0

죄송합니다. 클래스의 모든 코드를 여기에 표시하는 것이 더 간단하도록 만들지 않았습니다. 그러나 현실에서 나는 id = null, type = {UserType @ 11601} "MANAGER", email = "123", password = "123", name = "123", tel = "123", regDate = null, lastActive = null, office = null. 그래서 텍스트 필드가 정상이며 userType이 ENUM이므로 ok이지만 regDate는 ok입니다. 없는! User 클래스의 생성자에서 언급 한 현재 날짜 여야합니다. 어떤 아이디어? – Vampirenostra