무회blog

Spring,커맨드 객체 ( 폼/view에서  => 컨트롤에 값을 전달 )  본문

IT/Spring

Spring,커맨드 객체 ( 폼/view에서  => 컨트롤에 값을 전달 ) 

최무회 2020. 9. 1. 15:42

spring mvc 

 핸들러 매핑 
컨트롤러 메소드 
파라미터에 컨트롤러 메소드 파라미터 타입

예; Model (

커맨드 객체 ( 폼/view에서  => 컨트롤에 값을 전달 ) 

ModelAttribute => (컨트롤러에서 뷰로전달) 

jsp form 에서 입력 값 => jsp  값 

ModelAndView =>  값 전달+  model(비지니스처리)+view 

Model => 값전달+ model+view 


  BindingResult validation 을 받을때 


public String hello(

@RequestParam (value = "name", requered =false) String name,

@RequestParam (value = "name", requered =default) int age,  

view에서  => 컨트롤에 값을 전달 ) 

       @RequestMapping("/board_detail.do")

       public String board_detail(@RequestParam("seq") int seq, Model model){

             model.addAttribute("board", dao.getBoard(seq));

             return "detail";

       }




 RESTful 방식

uri 설정으로 필요한 서비스를 받는것 

@PathVariable 어노테이션을 이용해서 URI 템플릿 가능 

                        

       /*@RequestMapping("/board_detail.do")*/

       @RequestMapping("/board_detail{seq}")

       /*public String board_detail(@RequestParam("seq") int seq, Model  model){*/

       public String board_detail(@PathVariable int seq, Model model){

             model.addAttribute("board", dao.getBoard(seq));

             return "detail";

       }




tiles (타일즈)

Template 기술 (하나의 탬플릿 안에서 들어가서 돌아가는 방식) 

 템플릿 레이아웃 자체를 할때 구조를 잡는 용도 

예전에 많이 사용 


리엑트, vue 등 클라이언트에서 화면에 뿌려주는 관련 내용 

클라이언트에서 url 를 mvc 방식으로 화면에 보여줌 

컨퍼넌트 방식 (다른 로직에 영향 안미치고 지속적인 업그레이드 가능) 

사용한걸 반복적이다 보니 반복을 줄이는 방식 

타일즈 라이브러리 -> 메이븐 

tiles-jsp

tiles-core library

tiles-api 

 컨트롤러의 메소드 /*리턴값은 tiles-definitions 리턴값임 */

//     @RequestMapping(value="/board_list.do", method=RequestMethod.GET)

       /*@RequestMapping("/board_list.do")*/

       @RequestMapping("/board_list")

       public String board_list(Model model){

             //비즈니스 처리

             List<Board> list = dao.listBoard();

             //데이터 가져오기

             model.addAttribute("list", list);

             return "list";

             /*리턴값은 tiles-definitions 리턴값임 */

             //뷰 이름 정하기

       }


        springapp2-servlet.xml 에서 

       <!-- Tiles Setting -->

       <bean id="tilesConfigurer"

              class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">

             <property name="definitions">

                    <list>

                           <value>/WEB-INF/tiles2def.xml</value>

                    </list>

             </property>

       </bean>



파일업로드 관련 

프로젝트명: Sugjie02,

Board.xml 파일에서 Fname 추가 

Board.java  에서

필드 fname 추가 , get/set 추가 

MultipartFile uploadFile;   et/set 추가

springapp2-servlet.xml 에서 

       <!-- File Up/Down Setting -->

       <bean id="multipartResolver"

              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

             </bean>


BoardController 에서 /board_insert

       /*@RequestMapping(value="/board_insert.do", method=RequestMethod.GET)*/

       @RequestMapping(value="/board_insert", method=RequestMethod.GET)

       public String insertform(@ModelAttribute("boardCommand") Board board,  Model model){

             //데이터타입이 string이라면 , Model에서 받는다. 즉, 데이터 받는방법  데이터타입2가지 : modelandview, string-model

             model.addAttribute("title", "글쓰기2");

             

             return "insert_form";/*리턴값은 tiles-definitions 리턴값임 */

       }

       

       

       

       /*@RequestMapping(value="/board_insert.do", method=RequestMethod.POST)*/

       @RequestMapping(value="/board_insert", method=RequestMethod.POST)

       public String board_insert(@ModelAttribute("boardCommand") @Valid Board  board, BindingResult errors){

             

             if(errors.hasErrors()) //바인딩 객체에 에러가 있냐

             {

                    System.out.println("에러 발생");

                    return "insert_form";

                    /*리턴값은 tiles-definitions 리턴값임 */

             }

             

             MultipartFile multipartFile = board.getUploadFile();

             if(multipartFile != null){

                    String fname = multipartFile.getOriginalFilename();

                    board.setFname(fname);

                    

                    try {

                           multipartFile.transferTo(new File(uploadDir, fname));

                    } catch (Exception e) {

                           e.printStackTrace();

                    }

             }



 insert_form.jsp 에서 

       <form:form action="board_insert" method="post"

             commandName="boardCommand"

             enctype="multipart/form-data">

       작성자 : <form:input type="text" path="writer" />

             <form:errors path="writer" cssClass="error"></form:errors>


       제목 : <form:input type="text" path="title" />

             <form:errors path="title" cssClass="error"></form:errors>


       파일: <input type="file" name="uploadFile"/>


       내용

             <form:textarea rows="6" cols="70" path="contents" />

             

             <input type="submit" value="등록">

       </form:form>





File DownLoad 

 class 방식의 DownloadView.java 

springapp2-servlet.xml view타입 설정 




Comments