7. [ 실습 ] 예제어플리케이션개발 1. 실습개요 2. 프로젝트환경구성 3. 기본환경설정 4. 예제어플리케이션개발 5. 참조 - 539 -
1. 실습개요 (1/4) 7. [ 실습 ] 예제어플리케이션개발 스프링기반의 EGOV 프레임워크를사용하여구현된예제어플리케이션구현을통하여 Presentation Layer와 Business Layer의연계를살펴본다. 예제어플리케이션구현기능 게시판등록, 수정, 삭제, 조회 Presentation Layer Business Layer HandlerMapping egovsample Controller EgovSample Service SampleDAO Dispacher- Sevlet JstlView UrlBaseView Resolver DATABASE - 540 -
1. 실습개요 (2/4) 7. [ 실습 ] 예제어플리케이션개발 예제어플리케이션실행순서 사용자는 Web Page를통해서버에요청을보낸다. Spring Framework에의해처리되는모든요청은고유한 URL 매핑혹은확장자 (*.do) 를가지고있다. 모든 URL 매핑혹은확장자는 Servlet Container에의해서모든요청이 Spring Framework에서제공하는 DipatcherServlet으로넘어가게된다. DispatcherServlet은클라이언트의요청을전달받는 Servlet으로서, 컨트롤러나뷰와같은스프링의 MVC 구성요소를이용하여클라이언트에게서비스를제공한다. DispatcherServlet 의설정은웹어플리케이션의 /WEB-INF/web.xml 파일에추가한다. DispatcherServlet은컨트롤러객체의 handlerequest() 메서드를호출하여클라이언트의요청을처리한다. 컨트롤러의 handlerequest() 메서드는처리결과정보를담은 ModelAndView 객체를리턴한다. DistpatcherServlet은 ViewResolver로부터응답결과를생성할뷰개체를구한다. 뷰는클라이언트에전송할응답을생성한다. - 541 -
1. 실습개요 (3/4) 7. [ 실습 ] 예제어플리케이션개발 프로젝트구조 (1/2) maven Repository HSQL 로컬 DB 실행소스 (controller, interface, Impl, DAO..) 리소스정보 (message, spring context xml, SQL xml..) Web context - 542 -
1. 실습개요 (4/4) 7. [ 실습 ] 예제어플리케이션개발 프로젝트구조 (2/2) class management SampleDefaultVO Serializable - firstindex: int = 1 - lastindex: int = 1 - pageindex: int = 1 - pagesize: int = 10 - pageunit: int = 10 - recordcountperpage: int = 10 - searchcondition: String = "" - searchkeyword: String = "" - searchuseyn: String = "" + getfirstindex() : int + getlastindex() : int + getpageindex() : int + getpagesize() : int + getpageunit() : int + getrecordcountperpage() : int + getsearchcondition() : String + getsearchkeyword() : String + getsearchuseyn() : String + setfirstindex(int) : void + setlastindex(int) : void + setpageindex(int) : void + setpagesize(int) : void + setpageunit(int) : void + setrecordcountperpage(int) : void + setsearchcondition(string) : void + setsearchkeyword(string) : void + setsearchuseyn(string) : void + tostring() : String SampleVO - description: String - id: String - name: String - reguser: String - serialversionuid: long = 1L {readonly} - useyn: String # beanvalidator: DefaultBeanValidator # propertiesservice: EgovPropertyService - sampleservice: EgovSampleService Egov SampleController + addsample(sampledefaultvo, SampleVO, BindingResult, Model, SessionStatus) : String + addsampleview(sampledefaultvo, Model) : String + deletesample(samplevo, SampleDefaultVO, SessionStatus) : String + selectsample(samplevo, SampleDefaultVO) : SampleVO + selectsamplelist(sampledefaultvo, ModelMap) : String + updatesample(sampledefaultvo, SampleVO, BindingResult, Model, SessionStatus) : String + updatesampleview(string, SampleDefaultVO, Model) : String -sampleservice «interface» EgovSampleService + deletesample(samplevo) : void + insertsample(samplevo) : String + selectsample(samplevo) : SampleVO + selectsamplelist(sampledefaultvo) : List + selectsamplelisttotcnt(sampledefaultvo) : int + updatesample(samplevo) : void Egov SampleServ iceimpl - egovidgnrservice: EgovIdGnrService - sampledao: SampleDAO AbstractServiceImpl + deletesample(samplevo) : void + insertsample(samplevo) : String + selectsample(samplevo) : SampleVO + selectsamplelist(sampledefaultvo) : List + selectsamplelisttotcnt(sampledefaultvo) : int + updatesample(samplevo) : void SqlMapClientFactoryBean SqlMapClientDaoSupport + getdescription() : String + getid() : String + getname() : String + getreguser() : String + getuseyn() : String + setdescription(string) : void + setid(string) : void + setname(string) : void + setreguser(string) : void + setuseyn(string) : void -sampledao SampleDAO + deletesample(samplevo) : void + insertsample(samplevo) : String + selectsample(samplevo) : SampleVO + selectsamplelist(sampledefaultvo) : List + selectsamplelisttotcnt(sampledefaultvo) : int + updatesample(samplevo) : void Egov AbstractDAO + delete(string, Object) : int # EgovAbstractDAO() + insert(string, Object) : Object + list(string, Object) : List + listwithpaging(string, Object, int, int) : List + selectbypk(string, Object) : Object + setsupersqlmapclient(sqlmapclient) : void + update(string, Object) : int - 543 -
2. 프로젝트환경구성 (1/11) 7. [ 실습 ] 예제어플리케이션개발 Eclipse character encoding 설정 workspace의 character encoding은 UTF-8로한다. windows > preference를선택한다. general 탭의 workspace 선택후 Text file encoding 을 Other : UTF-8 로설정한다. - 544 -
2. 프로젝트환경구성 (2/11) 7. [ 실습 ] 예제어플리케이션개발 Tomcat 서버를설정한다. windows > preference 를선택한다. server탭의 Runtime Environments 선택후 Add버튼을사용하여 Apache Tomcat의각버전 (Tomcat 6.0 이상 ) 에맞는 Tomcat 위치를지정한다. (Tomcat 은사용자의로컬에설치되어있어야한다.) - 545 -
2. 프로젝트환경구성 (3/11) 7. [ 실습 ] 예제어플리케이션개발 egovframework.guideprogram.basic 프로젝트를 import 한다 (1/2). File>Import... 메뉴를선택한다. General>Maven Projects 를선택한다. - 546 -
2. 프로젝트환경구성 (4/11) 7. [ 실습 ] 예제어플리케이션개발 egovframework.guideprogram.basic 프로젝트를 import 한다 (2/2). [ 압축해제폴더 ]\egovframework.guideprogram.basic 를선택한다. Finish 버튼을클릭한다. - 547 -
2. 프로젝트환경구성 (5/11) 7. [ 실습 ] 예제어플리케이션개발 Maven Dependencies 를확인한다. Maven Dependencies 가생성되었음을확인한다. - 548 -
2. 프로젝트환경구성 (6/11) 7. [ 실습 ] 예제어플리케이션개발 Maven install 을실행한다. install 이성공하면 BUILD SUCCESSFUL 을확인할수있다. BUILD SUCCESSFUL 을확인한다 - 549 -
2. 프로젝트환경구성 (7/11) 7. [ 실습 ] 예제어플리케이션개발 DBMS(HSQL DB) 를실행한다. [ 압축해제폴더 ]\egovframework.guideprogram.basic\database\db 폴더로이동한다. 명령프롬프트를실행한후, runhsqldb.cmd 파일을실행시킨다. - 550 -
2. 프로젝트환경구성 (8/11) 7. [ 실습 ] 예제어플리케이션개발 어플리케이션을실행하여테스트한다. DBMS, Tomcat Server 를실행시킨후, Web Application 이제대로실행되는지확인한다. - 551 -
2. 프로젝트환경구성 (9/11) 7. [ 실습 ] 예제어플리케이션개발 브라우저로접속하여어플리케이션실행을확인한다. - 552 -
2. 프로젝트환경구성 (10/11) 7. [ 실습 ] 예제어플리케이션개발 프로젝트생성 egovframework Web Project Project name : egovframework.edu Target Runtime : Apache Tomcat v6.0 Version : 0.0.1-SNAPSHOT - 553 -
2. 프로젝트환경구성 (11/11) 7. [ 실습 ] 예제어플리케이션개발 프로젝트환경구성 Resource 환경구성 Message Spring Context Sqlmap(empty) Webapp 환경구성 common Css Images Config (Spring MVC config) jsp web.xml - 554 -
3. 기본환경설정 (1/10) 7. [ 실습 ] 예제어플리케이션개발 어플리케이션구현스텝 web.xml 설정 컨트롤러처리결과사용할뷰를결정할 ViewResolver 설정 DataSource 설정 DataAccess 설정 SQLMap 설정 SQLMapConfig 설정 - 555 -
3. 기본환경설정 (2/10) 7. [ 실습 ] 예제어플리케이션개발 사용자 Request 를처리하기위한 web.xml 및기본환경 context-*.xml 파일설정 사용자요청을받는서블릿인 DispatcherServlet 은컨트롤러와뷰를이용하여사용자에게응답처리를한다. DispatcherServlet 은 Web Application 의 /WEB-INF/web.xml 파일에다음과같이설정한다. <?xml version="1.0" encoding="utf-8"?> <web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <param-name>contextconfiglocation </param-name> <param-value> /WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> - 556 -
3. 기본환경설정 (3/10) 7. [ 실습 ] 예제어플리케이션개발 web.xml 설정 Presentation Layer와 Business Layer 연계를위한설정 web.xml에 context-param 요소로 contextconfiglocation 등록한다. Presentation Layer에존재하는 Bean 설정파일의위치를등록하여 Application Context로쉽게참조할수있도록한다. <?xml version="1.0" encoding="utf-8"?> <web-app> <context-param> <param-name>contextconfiglocation </param-name> <param-value> classpath*:egovframework/spring/context-*.xml </param-value> </context-param> </web-app> - 557 -
3. 기본환경설정 (4/10) 7. [ 실습 ] 예제어플리케이션개발 컨트롤러처리결과사용할뷰를결정할 ViewResolver 설정 (1/2) 컨트롤러가지정한뷰이름으로부터응답결과화면을생성하는 View 객체는 ViewResolver를통해서생성한다. BasicSampleService의 Exception ViewResolver는아래와같이 dispatcher-servlet.xml에설정한다. <?xml version="1.0" encoding="utf-8"?> <bean class="org.springframework.web.servlet.handler.simplemappingexceptionresolver"> <property name="defaulterrorview" value="cmmn/egoverror" /> <property name="exceptionmappings"> <props> <prop key="org.springframework.dao.dataaccessexception">cmmn/dataaccessfailure </prop> <prop key="org.springframework.transaction.transactionexception">cmmn/transactionfailure </prop> <prop key="egovframework.rte.fdl.cmmn.exception.egovbizexception">cmmn/egovbizexception</prop> </props> </property> </bean> - 558 -
3. 기본환경설정 (5/10) 7. [ 실습 ] 예제어플리케이션개발 컨트롤러처리결과사용할뷰를결정할 ViewResolver 설정 (2/2) Basisc Sample Service 의 ViewResolver 는아래와같이 dispatcher-servlet.xml 에설정한다. <?xml version="1.0" encoding="utf-8"?> <bean class="org.springframework.web.servlet.view.urlbasedviewresolver" p:order="1" p:viewclass="org.springframework.web.servlet.view.jstlview" p:prefix="/web-inf/jsp/egovframework/rte/" p:suffix=".jsp" /> - 559 -
3. 기본환경설정 (6/10) 7. [ 실습 ] 예제어플리케이션개발 DataSource 설정 Datasource 추가 위치 : resources/egovframework/spring/context-datasource.xml Hsql 의 driverclassname : net.sf.log4jdbc.driverspy Hsql 의 url : jdbc:log4jdbc:hsqldb:hsql://localhost/sampledb Hsql 의 username: sa <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroymethod="close"> <property name="driverclassname" value="net.sf.log4jdbc.driverspy"/> <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/sampledb"/> <property name="username" value="sa"/> </bean> - 560 -
3. 기본환경설정 (7/10) 7. [ 실습 ] 예제어플리케이션개발 DataAccess 설정 ibatis 를사용하기위한 SqlMapConfig 위치설정 <bean id="sqlmapclient" class="org.springframework.orm.ibatis.sqlmapclientfactorybean"> <property name="configlocation" value="classpath:/egovframework/sqlmap/sql-map-config.xml"/> <property name="datasource" ref="datasource"/> </bean> SqlMapConfig 설정 : SQL 위치지정 <sqlmapconfig> <sqlmap resource="egovframework/sqlmap/edu/egovedu_sql.xml"/> </sqlmapconfig> - 561 -
3. 기본환경설정 (8/10) 7. [ 실습 ] 예제어플리케이션개발 SQLMap 설정 ibatis를사용하기위한 SqlMap생성 Parent folder : egovframework.edu/src/main/resources/egovframework/sqlmap/edu File name : EgovEdu_SQL.xml - 562 -
3. 기본환경설정 (9/10) 7. [ 실습 ] 예제어플리케이션개발 SQLMapConfig 설정 (1/2) ibatis를사용하기위한 SqlMap생성 Parent folder : egovframework.edu/src/main/resources/egovframework/sqlmap File name : sql-map-config.xml - 563 -
3. 기본환경설정 (10/10) 7. [ 실습 ] 예제어플리케이션개발 SQLMapConfig 설정 (2/2) Add 로 sqlmap 선택 위치 : resource/egovframework/sqlmap/edu/egovedu_sql.xml <sqlmapconfig> <sqlmap resource="egovframework/sqlmap/edu/egovedu_sql.xml"/> </sqlmapconfig> - 564 -
4. 예제어플리케이션개발 (1/27) 7. [ 실습 ] 예제어플리케이션개발 어플리케이션구현스텝 목록조회기능개발 상세조회기능개발 입력기능및 idgen, validation 기능개발 수정기능개발 삭제기능개발 - 565 -
4. 예제어플리케이션개발 (2/27) 7. [ 실습 ] 예제어플리케이션개발 목록조회 SampleVO 작성 SQLMap 작성및 SQL 작성 DAO 작성 Impl 작성 Controller 작성 - 566 -
4. 예제어플리케이션개발 (3/27) 7. [ 실습 ] 예제어플리케이션개발 SampleVO 작성 속성 속성설명타입 id 사용자아이디 String name 사용자명 String description 내용 String useyn 사용여부 String reguser 등록자 String 패키지 : egovframework.education.sample.service private String id; public String getid() { return id; } public void setid(string id) { this.id = id; }... - 567 -
4. 예제어플리케이션개발 (4/27) 7. [ 실습 ] 예제어플리케이션개발 SQLMap 작성 Alias 추가 resources/egovframework/sqlmap/edu/egovedu_sql.xml 파일에설정 egovmap : egovframework.rte.psl.dataaccess.util.egovmap 1. Apache commons Collections 의 ListOrderedMap 을 extends 하고있으며 Map 의 key 를입력시 Camel Case 표기법으로변경하여처리하는 Map 의구현체 2. ibatis 의경우 egovmap 으로결과조회시별도의 alias 없이 DB 칼럼명그대로조회하는것만으로도일반적인 VO 의 attribute (camel case) 에대한 resultmap 과같은효과를낼수있도록추가하였음 searchvo : egov egovframework.edu.service.sampledefaultvo 1. 화면조회를위한조건정보 : page, index, 페이지당레코드수 samplevo : egov egovframework.edu.service.samplevo 조회결과에매핑되기위한필드정보 <sqlmap namespace="education"> <typealias alias="egovmap" type="egovframework.rte.psl.dataaccess.util.egovmap"/> <typealias alias="searchvo" type="egovframework.edu.sample.service.sampledefaultvo"/> <typealias alias= samplevo" type="egovframework.edu.sample.service.samplevo"/> </sqlmap> - 568 -
4. 예제어플리케이션개발 (5/27) 7. [ 실습 ] 예제어플리케이션개발 목록조회 (1/3) SQL 작성 resources/egovframework/sqlmap/edu/egovedu_sql.xml 파일에설정 <select id="sampledao.selectsamplelist_d" parameterclass="searchvo" resultclass="egovmap"> SELECT ID, NAME, DESCRIPTION, USE_YN, REG_USER FROM SAMPLE WHERE 1=1 <isequal prepend="and" property="searchcondition" comparevalue="0"> ID = #searchkeyword# </isequal> <isequal prepend="and" property="searchcondition" comparevalue="1"> NAME LIKE '%' #searchkeyword# '%' </isequal> ORDER BY ID DESC </select> - 569 -
4. 예제어플리케이션개발 (6/27) 7. [ 실습 ] 예제어플리케이션개발 목록조회 (2/3) DAO 클래스작성 public List selectsamplelist(sampledefaultvo searchvo) throws Exception { return list("sampledao.selectsamplelist_d", searchvo); } Impl 클래스작성 public List selectsamplelist(sampledefaultvo searchvo) throws Exception { return sampledao.selectsamplelist(searchvo); } Controller 작성 @RequestMapping(value="/sample/egovSampleList.do") public String selectsamplelist(@modelattribute("searchvo") SampleDefaultVO searchvo, ModelMap model) throws Exception { } List samplelist = sampleservice.selectsamplelist(searchvo); model.addattribute("resultlist", samplelist); Jsp 에서 items로결과를받아온다. return "/sample/egovsamplelist"; View(egovSampleList.jsp) - 570 -
4. 예제어플리케이션개발 (7/27) 7. [ 실습 ] 예제어플리케이션개발 목록조회 (3/3) 결과 - 571 -
4. 예제어플리케이션개발 (8/27) 7. [ 실습 ] 예제어플리케이션개발 상세조회 SQLMap (ResultMap) 작성 DAO 작성 Impl 작성 Controller 작성 - 572 -
4. 예제어플리케이션개발 (9/27) 7. [ 실습 ] 예제어플리케이션개발 상세조회 (1/3) SQLMap 작성 <resultmap id="sample" class="egovframework.education.sample.service.samplevo"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="description" column="description"/> <result property="useyn" column="use_yn"/> <result property="reguser" column="reg_user"/> </resultmap> SQL 작성 <select id="sampledao.selectsample_s" resultmap="sample"> <![CDATA[ SELECT ID, NAME, DESCRIPTION, USE_YN, REG_USER FROM SAMPLE WHERE ID=#id# ]]> </select> Impl 작성 public SampleVO selectsample(samplevo vo) throws Exception { SampleVO resultvo = sampledao.selectsample(vo); if (resultvo == null) throw processexception("info.nodata.msg"); return resultvo; } - 573 -
4. 예제어플리케이션개발 (10/27) 7. [ 실습 ] 예제어플리케이션개발 상세조회 (2/3) SqlMap Editor 를이용하여 resultmap 을설정할수도있다. - 574 -
4. 예제어플리케이션개발 (11/27) 7. [ 실습 ] 예제어플리케이션개발 상세조회 (3/3) DAO 작성 public SampleVO selectsample(samplevo vo) throws Exception { return (SampleVO) selectbypk("sampledao.selectsample_s", vo); } Controller 작성 @RequestMapping("/sample/selectSample.do") public @ModelAttribute("sampleVO") SampleVO selectsample( SampleVO samplevo, @ModelAttribute("searchVO") SampleDefaultVO searchvo) throws Exception { } return sampleservice.selectsample(samplevo); @RequestMapping("/sample/updateSampleView.do") public String updatesampleview( @RequestParam("selectedId") String id, @ModelAttribute("searchVO") SampleDefaultVO searchvo, Model model) throws Exception { SampleVO vo = new SampleVO(); vo.setid(id); model.addattribute(selectsample(vo, searchvo)); } return "/sample/egovsampleregister"; - 575 -
4. 예제어플리케이션개발 (12/27) 7. [ 실습 ] 예제어플리케이션개발 상세조회결과 - 576 -
4. 예제어플리케이션개발 (13/27) 7. [ 실습 ] 예제어플리케이션개발 등록 SQL 작성 DAO 작성 Impl 작성 context-idgen.xml 작성 Validator 작성 - 577 -
4. 예제어플리케이션개발 (14/27) 7. [ 실습 ] 예제어플리케이션개발 등록 (1/3) SQL 작성 <insert id="sampledao.insertsample_s"> <![CDATA[ INSERT INTO SAMPLE ( ID, NAME, DESCRIPTION, USE_YN, REG_USER ) VALUES ( #id#, #name#, #description#, #useyn#, #reguser# ) ]]> </insert> DAO 작성 public String insertsample(samplevo vo) throws Exception { return (String)insert("sampleDAO.insertSample_S", vo); } - 578 -
4. 예제어플리케이션개발 (15/27) 7. [ 실습 ] 예제어플리케이션개발 등록 (2/3) Impl 작성 @Resource(name="egovIdGnrService") private EgovIdGnrService egovidgnrservice; public String insertsample(samplevo vo) throws Exception { String id = egovidgnrservice.getnextstringid(); vo.setid(id); } sampledao.insertsample(vo); return id; - 579 -
4. 예제어플리케이션개발 (16/27) 7. [ 실습 ] 예제어플리케이션개발 등록 (3/3) Controller 작성 @Resource(name = "beanvalidator") protected DefaultBeanValidator beanvalidator; @RequestMapping("/sample/addSampleView.do") public String addsampleview( @ModelAttribute("searchVO") SampleDefaultVO searchvo, Model model) throws Exception { } model.addattribute("samplevo", new SampleVO()); return "/sample/egovsampleregister"; @RequestMapping("/sample/addSample.do") public String addsample( @ModelAttribute("searchVO") SampleDefaultVO searchvo, SampleVO samplevo, BindingResult bindingresult, Model model, SessionStatus status) throws Exception { // Server-Side Validation beanvalidator.validate(samplevo, bindingresult); if (bindingresult.haserrors()) { model.addattribute("samplevo", samplevo); return "/sample/egovsampleregister"; } } sampleservice.insertsample(samplevo); status.setcomplete(); return "forward:/sample/egovsamplelist.do"; - 580 -
4. 예제어플리케이션개발 (17/27) 7. [ 실습 ] 예제어플리케이션개발 등록 -idgen Context-idgen.xml 작성 <bean name="egovidgnrservice" class="egovframework.rte.fdl.idgnr.impl.egovtableidgnrservice" destroy-method="destroy"> <property name="datasource" ref="datasource" /> <property name="strategy" ref="mixprefixsample" /> <property name="blocksize" value="10"/> <property name="table" value="ids"/> <property name="tablename"value="sample"/> </bean> <bean name="mixprefixsample" class="egovframework.rte.fdl.idgnr.impl.strategy.egovidgnrstrategyimpl"> <property name="prefix" value="sample-" /> <property name="cipers" value="5" /> <property name="fillchar" value="0" /> </bean> - 581 -
4. 예제어플리케이션개발 (18/27) 7. [ 실습 ] 예제어플리케이션개발 등록 -validator(1/3) dispatcher-servlet.xml 수정 <bean id="beanvalidator" class="org.springmodules.validation.commons.defaultbeanvalidator"> <property name="validatorfactory" ref="validatorfactory"/> </bean> <bean id="validatorfactory" class="org.springmodules.validation.commons.defaultvalidatorfactory"> <property name="validationconfiglocations"> <list> <value>/web-inf/config/egovframework/validator/validator-rules.xml</value> <value>/web-inf/config/egovframework/validator/validator.xml</value> </list> </property> </bean> - 582 -
4. 예제어플리케이션개발 (19/27) 7. [ 실습 ] 예제어플리케이션개발 등록 -validator(2/3) Validator.xml 작성 <form-validation> <formset> <form name="samplevo"> <field property="name" depends="required"> <arg0 key="title.sample.name" /> </field> <field property="description" depends="required"> <arg0 key="title.sample.description" /> </field> <field property="reguser" depends="required"> <arg0 key="title.sample.reguser" /> </field> </form> </formset> </form-validation> Validator-rules.xml 작성 - 583 -
4. 예제어플리케이션개발 (20/27) 7. [ 실습 ] 예제어플리케이션개발 등록 -validator(3/3) jsp 작성 <%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> <script type="text/javascript" src="<c:url value='/cmmn/validator.do'/>"></script> <validator:javascript formname="samplevo" staticjavascript="false" xhtml="true" cdata="false"/> function fn_egov_save() { frm = document.detailform; if(!validatesamplevo(frm)){ return; }else{ frm.action = "<c:url value="${registerflag == ' 등록 '? '/sample/addsample.do' : '/sample/updatesample.do'}"/>"; frm.submit(); } } - 584 -
4. 예제어플리케이션개발 (21/27) 7. [ 실습 ] 예제어플리케이션개발 등록결과 - 585 -
4. 예제어플리케이션개발 (22/27) 7. [ 실습 ] 예제어플리케이션개발 수정 (1/2) SQL 작성 <update id="sampledao.updatesample_s"> <![CDATA[ UPDATE SAMPLE SET ID=#id#, NAME=#name#, DESCRIPTION=#description#, USE_YN=#useYn# WHERE ID=#id# ]]> </update> DAO 작성 public void updatesample(samplevo vo) throws Exception { update("sampledao.updatesample_s", vo); } Impl 작성 public void updatesample(samplevo vo) throws Exception { sampledao.updatesample(vo); } - 586 -
4. 예제어플리케이션개발 (23/27) 7. [ 실습 ] 예제어플리케이션개발 수정 (2/2) Controller 작성 @RequestMapping("/sample/updateSampleView.do") public String updatesampleview( @RequestParam("selectedId") String id, @ModelAttribute("searchVO") SampleDefaultVO searchvo, Model model) throws Exception { SampleVO samplevo = new SampleVO(); samplevo.setid(id); } model.addattribute(selectsample(samplevo, searchvo)); return "/sample/egovsampleregister"; @RequestMapping("/sample/updateSample.do") public String updatesample( @ModelAttribute("searchVO") SampleDefaultVO searchvo, SampleVO samplevo, BindingResult bindingresult, Model model, SessionStatus status) throws Exception { beanvalidator.validate(samplevo, bindingresult); if (bindingresult.haserrors()) { model.addattribute("samplevo", samplevo); return "/sample/egovsampleregister"; } } sampleservice.updatesample(samplevo); status.setcomplete(); return "forward:/sample/egovsamplelist.do"; - 587 -
4. 예제어플리케이션개발 (24/27) 7. [ 실습 ] 예제어플리케이션개발 수정결과 - 588 -
4. 예제어플리케이션개발 (25/27) 7. [ 실습 ] 예제어플리케이션개발 삭제 (1/2) SQL 작성 <delete id="sampledao.deletesample_s"> <![CDATA[ DELETE FROM SAMPLE WHERE ID=#id# ]]> </delete> DAO 작성 public void deletesample(samplevo vo) throws Exception { delete("sampledao.deletesample_s", vo); } - 589 -
4. 예제어플리케이션개발 (26/27) 7. [ 실습 ] 예제어플리케이션개발 삭제 (2/2) Impl 작성 public void deletesample(samplevo vo) throws Exception { sampledao.deletesample(vo); } Controller 작성 @RequestMapping("/sample/deleteSample.do") public String deletesample( SampleVO samplevo, @ModelAttribute("searchVO") SampleDefaultVO searchvo, SessionStatus status) throws Exception { } sampleservice.deletesample(samplevo); status.setcomplete(); return "forward:/sample/egovsamplelist.do"; - 590 -
4. 예제어플리케이션개발 (27/27) 7. [ 실습 ] 예제어플리케이션개발 삭제결과 - 591 -
5. 참조 (1/2) 7. [ 실습 ] 예제어플리케이션개발 AbstractServiceImpl 기본메소드 EgovBizException 발생을위한메소드 protected Exception processexception(final String msgkey) protected Exception processexception(final String msgkey, Exception e) protected Exception processexception(final String msgkey, final String[] msgargs) protected Exception processexception(final String msgkey, final String[] msgargs, final Exception e) protected Exception processexception(final String msgkey, final String[] msgargs, final Exception e, Locale locale) protected Exception processexception(final String msgkey, final String[] msgargs, final Exception e, final Locale locale, ExceptionCreator exceptioncreator) Exception 발생없이후처리로직실행을위한메소드 protected void leaveatrace(string msgkey) protected void leaveatrace(string msgkey, String[] msgargs) protected void leaveatrace(string msgkey, String[] msgargs, Locale locale) - 592 -
5. 참조 (2/2) 7. [ 실습 ] 예제어플리케이션개발 EgovAbstractDAO ibatis 의 SqlMapClientDaoSupport 확장 입력처리 SQL mapping 을실행한다. public Object insert(string queryid, Object parameterobject) 수정처리 SQL mapping 을실행한다. public int update(string queryid, Object parameterobject) 삭제처리 SQL mapping 을실행한다. public int delete(string queryid, Object parameterobject) pk 를조건으로한단건조회처리 SQL mapping 을실행한다. public Object selectbypk(string queryid, Object parameterobject) 리스트조회처리 SQL mapping 을실행한다. public List list(string queryid, Object parameterobject) 부분범위리스트조회처리 SQL mapping 을실행한다. ( 부분범위 - pageindex 와 pagesize 기반으로현재부분범위조회를위한 skipresults, maxresults 를계산하여 ibatis 호출 ) public List listwithpaging(string queryid, Object parameterobject, int pageindex, int pagesize) - 593 -