SpringMVC 데이터 바 인 딩 및 폼 태그 구현

우선 데이터 바 인 딩 이해
데이터 바 인 딩 을 왜 사용 합 니까?
HTTP 기능 을 기반 으로 모든 사용자 가 입력 한 요청 매개 변 수 는 String 입 니 다.예 를 들 어 아래 폼 과 같 습 니 다.

그러나 저희 가 제출 한 후에 요청 정 보 를 모델 에 투사 하기 위해 서 는 수 동 으로 형식 전환 이 필요 합 니 다.또한 중간 대상 produtForm 을 빌 렸 습 니 다.필드 이름 은 Product 와 똑 같 고 유형 은 String 입 니 다.

@RequestMapping(value = "/product_save",method = RequestMethod.POST)
 public String saveProduct(ProductForm productForm, RedirectAttributes redirectAttributes)
 {
 logger.info("saveProduct called");
 System.out.println(productForm);
 Product product = new Product();
 product.setName(productForm.getName());
 try { //         
 product.setPrice(Float.parseFloat(productForm.getPrice()))
 } catch (Exception e) {
 e.printStackTrace();
 }
 product.setDescription(productForm.getDescription());
 Product savedProduct =productService.add(product);
 //          ,              <annotation-driven/>
 redirectAttributes.addFlashAttribute("message","The product was successful added");
 return "redirect:/product_view/"+savedProduct.getId();
 }


전환 이상 을 피하 고 우리 의 업 무량 을 줄 이기 위해 데이터 바 인 딩 을 도입 하 였 습 니 다.
데이터 바 인 딩 은 사용자 의 입력 을 영역 모델 에 연결 하 는 특성 입 니 다.
데이터 바 인 딩 이 있 으 면 SpringMVC 는 자동 으로 형식 변환 을 진행 합 니 다.다음 과 같이 작성 하면 됩 니 다.

public String saveProduct(Produc product, RedirectAttributes redirectAttributes)
{....}
이것 은 의심 할 여지없이 편리 할 것 이다.단,데이터 바 인 딩 을 실현 하려 면 폼 태그 라 이브 러 리 를 사용 해 야 합 니 다.
폼 라 이브 러 리
taglib 명령 추가
폼 라 이브 러 리 에는 JSP 페이지 에 HTML 요 소 를 렌 더 링 할 수 있 는 탭 이 포함 되 어 있 습 니 다.
 이 탭 을 사용 하기 위해 서 는 이 taglib 명령 을 시작 부분 에 설명해 야 합 니 다.
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 
폼 탭 라 이브 러 리 의 모든 탭:

폼 태그
실현 적 효과
구체 적 인 폼 라벨 의 용법 은 원문(SpringMVC 폼 라벨 사용 설명)을 자세히 보십시오.
다음 에 저 는 제 인 스 턴 스 를 통 해 사용 하 는 폼 라벨 을 말씀 드 리 겠 습 니 다.
우리 의 실현 효과:
1.도서 목록 창:

2.도서 편집 화면:

사고 분석.
1.우선 도서 목록 창 에서 링크 를 클릭 하면 북edit/${book.id}。

<body>
 <a href="<c:url value=" rel="external nofollow" /book_input"/>">Add Book</a>
 <table>
 <tr>
 <th>Category</th>
 <th>Title</th>
 <th>ISBN</th>
 <th>Author</th>
 <th>&nbsp;</th>
 </tr>
 <c:forEach items="${books}" var="book">
 <tr>
 <td>${book.category.name}</td>
 <td>${book.title}</td>
 <td>${book.isbn}</td>
 <td>${book.author}</td>
 <td><a href="book_edit/${book.id}" rel="external nofollow" >Edit</a> </td>
 </tr>
 </c:forEach>
 </table>
</body>
2.Controller 가 요청 을 받 으 면 분류 정보 와 도서 정 보 를 Model 에 저장 합 니 다.

@RequestMapping(value = "/book_edit/{id}")
 public String bookSave(Model model, @PathVariable int id)
 {
 List<Category> categories=bookService.getAllCategorys();
 model.addAttribute("categories",categories);
 Book book= bookService.get(id);
 model.addAttribute("book",book);
 return "BookEditForm";
 }
3.폼 탭 을 사용 하여 requestScope 의 Book 대상 과 Category 대상 을 폼 에 연결 합 니 다.

<body>
<form:form commandName="book" action="book_update" method="post">
 <legend>Edit a Book</legend>
 <p>
 <label for="category">Category:</label>
 <form:select id="category" path="category.id" items="${categories}" itemLabel="name" itemValue="id"/>
 </p>
 <p>
 <label for="title">Title:</label>
 <form:input id="title" path="title"/>
 </p>
 <p>
 <label for="author">Author:</label>
 <form:input id="author" path="author"/>
 </p>
 <p>
 <label for="isbn">ISBN:</label>
 <form:input id="title" path="isbn"/>
 </p>
 <p>
 <input type="reset">
 <input type="submit" value="Update Book">
 </p>
</form:form>
</body>
폼 라벨 의 FORM
Spring 을 사용 하 는 form 라벨 은 주로 두 가지 역할 을 합 니 다.
첫째,Model 에서 온 속성 값 을 현재 form 에 대응 하 는 실체 대상 에 자동 으로 연결 합 니 다.기본 값 은 command 속성 입 니 다.그러면 우 리 는 form 폼 에서 이 대상 의 속성 을 편리 하 게 사용 할 수 있 습 니 다.그러나 우리 가 사용 할 Model 의 Book 은 기본 command 가 아 닙 니 다.따라서 Model 에 저 장 된 Book 키 쌍 의 키 값 을 command 로 바 꾸 거나 form 에서 commandName,즉 commandName="book"을 지정 할 수 있 습 니 다.
두 번 째 는 저희 가 양식 을 제출 할 때 GET 와 POST 를 제외 한 다른 방법 으로 제출 할 수 있 도록 지원 합 니 다.DELETE 와 PUT 등 을 포함 합 니 다. 

<form:form action="formTag/form.do" method="delete" modelAttribute="user"> 
 <table> 
 <tr> 
 <td>Name:</td><td><form:input path="name"/></td> 
 </tr> 
 <tr> 
 <td>Age:</td><td><form:input path="age"/></td> 
 </tr> 
 <tr> 
 <td colspan="2"><input type="submit" value="  "/></td> 
 </tr> 
 </table> 
</form:form> 
설명:
생 성 된 코드 는 다음 과 같 습 니 다.

<form id="user" action="formTag/form.do" method="post"> 
 <input type="hidden" name="_method" value="delete"/> 
 <table> 
 <tr> 
 <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td> 
 </tr> 
 <tr> 
 <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td> 
 </tr> 
 <tr> 
 <td colspan="2"><input type="submit" value="  "/></td> 
 </tr> 
 </table> 
</form> 
이 코드 를 통 해 알 수 있 듯 이 Spring 은 GET 와 POST 를 제외 한 요청 방법 을 실현 할 때 POST 방법 으로 요청 한 다음 폼 에 숨겨 진 도 메 인 을 추가 하여 진정한 요청 방법 을 표시 합 니 다.이 숨겨 진 도 메 인의 이름 은 기본적으로""입 니 다.method”。
하지만 이 때 는 웹 XML 에 추가 해 야 합 니 다.

<filter> 
 <filter-name>hiddenHttpMethodFilter</filter-name> 
 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 
<filter-mapping> 
 <filter-name>hiddenHttpMethodFilter</filter-name> 
 <url-pattern>/*</url-pattern> 
</filter-mapping> 
자세 한 내용 은 보 세 요.
폼 탭 의 Input
SpringMVC 의 input 탭 은 type 이 text 인 일반 Html input 탭 으로 표 시 됩 니 다.이 탭 의 가장 중요 한 속성 은 PATH 입 니 다.이 입력 필드 를 북 의 제목 속성,즉 북 의 제목 속성 에 연결 합 니 다. 

<p>
 <label for="title">Title:</label>
 <form:input id="title" path="title"/>
</p>
SpringMVC 의 input 라벨 을 사용 하 는 유일한 역할 은 폼 데 이 터 를 연결 하 는 것 입 니 다.SpringMVC 폼 라벨 의 가장 큰 장점 은 데이터 바 인 딩 을 지원 하 는 것 입 니 다.폼 라벨 이 바 인 딩 된 데이터 가 필요 하지 않 을 때 일반적인 Html 라벨 을 사용 해 야 합 니 다.input 태그 바 인 딩 폼 데이터 에 대한 방법 은 form 라벨 을 소개 할 때 소 개 했 습 니 다.여 기 는 더 이상 군말 하지 않 습 니 다.
폼 탭 의 Select
select 탭 은 일반적인 HTML select 탭 으로 렌 더 링 됩 니 다.user 가 가장 좋아 하 는 구기 운동 을 예 로 들 면 다음 과 같은 프로세서 방법 과 대응 하 는 보기 페이지 가 있 습 니 다.
       이 때 다음 과 같은 결 과 를 보 여 줍 니 다.

위의 예 시 를 통 해 우 리 는 알 수 있다.
1.items 속성 을 통 해 select 탭 에 데이터 원본 을 지정 하고 폼 대상 user 의 favoriteBall 속성 을 연결 합 니 다.
설명:
Items 속성 은 현재 select 의 모든 옵션 을 지정 하 는 데 사 용 됩 니 다.그러나 select 탭 에 필요 한 것 은 아 닙 니 다.select 탭 사이 에 option 탭 을 수 동 으로 추가 하여 select 가 선택 할 수 있 는 option 을 지정 할 수 있 기 때 문 입 니 다.
2.Select 태그 가 지원 하 는 items 속성의 데이터 형식 은 Array,Collection,Map 일 수 있 습 니 다.데이터 형식 이 Array 또는 Collection 일 때 그 중의 요소 가 POJO 일 때 속성 itemLabel 과 itemValue 를 통 해 표시 할 option Label 과 Value 를 지정 할 수 있 습 니 다.다른 경우 Array 와 Collection 데이터 원본 의 요 소 는 옵션 옵션 의 value 로 도 사용 되 고 Label 로 도 사 용 됩 니 다.items 의 데이터 형식 이 Map 일 때 Map 의 key 는 옵션 옵션 을 선택 할 수 있 는 value 이 고,Map 의 value 는 option 의 Label 태그 가 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기