detail Form > update Form


detail 뷰(Form)

1
<form name="frmForm" id="_frmForm" method="post" action="bbsupdate.do">
cs


1
2
3
4
$("#_btnUpdate").click(function() {    
    alert('글수정하기');        
    $("#_frmForm").attr({ "target":"_self""action":"bbsupdate.do" }).submit();
});
cs

hidden으로 수정할 게시글의 seq 정보 넘김


컨트롤러( update.do : 수정 뷰 보여주기 )


    return "bbsupdate.tiles";
cs

가져올 게시판 정보에 해당하는 게시글의 seq 입력

update폼으로 해당 게시글의 정보 addAttribute "bbs"





디비에 수정된 정보 변경 , update Form> detail Form


10행 : 해당게시글의 seq값을 bbsupdateAf.do로 보낸다



1
2
3
4
5
6
7
@RequestMapping(value = "bbsupdateAf.do"
            method = RequestMethod.POST)
    public String bbsupdateAf(BbsDto bbs,Model model) throws Exception {
        logger.info("Welcome BBSController bbsupdateAf! "+ new Date());
        khBbsService.updateBbs(bbs);
        return "redirect:/bbslist.do";
    }
cs

5행: 들어온seq값(bbs)을 db.xml update문으로 보내줌 


서비스

1
2
3
4
@Override
    public void updateBbs(BbsDto bbs) throws Exception {
        khBbsDao.updateBbs(bbs);
    }
cs

이 코드는 db의 update쿼리로 넘겨주는 역할만 하고있다

만약 수정 실패시 에러를 띄우고 싶다면 void가 아니라 boolean또는 int로 결과값을 만들어 에러메시지를 띄울 수 있다


xml

1
2
3
4
5
6
<update id="updateBbs"
    parameterType="kh.com.a.model.BbsDto">
    UPDATE BBS SET
    TITLE=#{title}, CONTENT=#{content}, WDATE=SYSDATE
    WHERE SEQ=#{seq}
</update>
cs



Delete



detail 뷰

1
2
3
4
$("#_btnDel").click(function() {    
    alert('삭제하기');
    $("#_frmForm").attr({ "target":"_self""action":"bbsdelete.do" }).submit();
});
cs



컨트롤러

1
2
3
4
5
6
7
8
@RequestMapping(value = "bbsdelete.do"
            method = {RequestMethod.GET,RequestMethod.POST})
    public String bbsdelete(BbsDto bbs, Model model) throws Exception{
        logger.info("Welcome BBSController bbsdelete! "+ new Date());
        
        khBbsService.deleteBbs(bbs.getSeq());
        return "redirect:/bbslist.do";
    }
cs

6행 : 해당게시글의 seq넘겨주고 deleteBbs쿼리문 실행


서비스

1
2
3
4
@Override
    public void deleteBbs(int seq) throws Exception {
        khBbsDao.deleteBbs(seq);
    }
cs


db.xml

1
2
3
4
5
<update id="deleteBbs" parameterType="java.lang.Integer">
    UPDATE BBS
    SET DEL=1
    WHERE SEQ=#{seq}
</update>
cs



이전 뷰

bbslist 뷰에서 detail 뷰로 넘어갈때 seq를 넘겨준다



컨트롤러

컨트롤러에서 83행으로 seq값이 들어온다

88행에 들어온 seq값을 db로 보내준다

89행 다음뷰로 보낼 데이터(bbs) 전송 , 전송이름 bbs


서비스 

1
2
3
4
5
6
@Override
    public BbsDto getBbs(int seq) throws Exception {
 
        return khBbsDao.getBbs(seq);    
    }
 
cs

다오

1
2
3
4
@Override
    public BbsDto getBbs(int seq) {
        return sqlSession.selectOne(namespace+"getBbs", seq);
    }
cs


bbs.xml

1
2
3
4
5
6
7
8
9
<select id="getBbs"
parameterType="java.lang.Integer"
resultType="kh.com.a.model.BbsDto">
    SELECT SEQ, ID, REF, STEP, DEPTH, TITLE, 
    CONTENT, WDATE, PARENT, DEL, READCOUNT
    FROM BBS
    WHERE SEQ=#{seq}
</select>
 
cs

들어온 seq값을 7행에 parameterType

결과값 반환은 resultType BbsDto 형태



bbswrite.jsp (뷰)



컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RequestMapping(value = "bbslist.do", method = { RequestMethod.GET , RequestMethod.POST})
    public String bbsList(Model model) throws Exception{        
        logger.info("KhBbsController bbslist" + new Date());
        
        
        
        List<BbsDto> list = khBbsService.getBbsList();
        logger.info("bbslist~~" + list);
        
        
        model.addAttribute("bbslist", list);
 
        return "bbslist.tiles";
    }
cs

1
2
3
4
5
6
7
8
@RequestMapping(value="bbswrite.do", method = {RequestMethod.GET,    RequestMethod.POST})
    public String bbswrite(Model model) {
        logger.info("Welcome SistMemberController bbswrite! "+ new Date());
        
        model.addAttribute("doc_title""글 쓰기");
        
        return "bbswrite.tiles";
    }    
cs


2행 : public String bbswrite(Model model) {


Model model  페이지만 이동하는 것이기때문에  model객체가 특별히 필요하지 않다


타일즈.xml

1
2
3
<definition name="bbswrite.tiles" extends="bbslist.tiles">
        <put-attribute name="main" value="/WEB-INF/views/bbs/bbswrite.jsp"/>
</definition>
cs



bbs.xml (디비접근)

1
2
3
4
5
6
7
<insert id="writeBbs" parameterType="kh.com.a.model.BbsDto">
    INSERT INTO BBS
    (SEQ,ID,REF,STEP,DEPTH,TITLE,CONTENT,WDATE,PARENT,DEL,READCOUNT) 
    VALUES(SEQ_BBS.nextval,#{id},
        (SELECT NVL(MAX(REF),0)+1 FROM BBS),
        0,0,#{title},#{content},SYSDATE,0,0,0)
</insert>
cs


dao

boolean writeBbs(BbsDto bbs) throws Exception;


daoImpl

1
2
3
4
5
6
@Override
    public boolean writeBbs(BbsDto bbs) throws Exception {
        sqlSession.insert(namespace+"writeBbs",bbs);    
        return true;
    }
 
cs


service

public boolean writeBbs(BbsDto bbs) throws Exception;


serviceImpl

@Override

public boolean writeBbs(BbsDto bbs) throws Exception {

return khBbsDao.writeBbs(bbs);

}


컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
    @RequestMapping(value="bbswrite.do", method = {RequestMethod.GET,    RequestMethod.POST})
    public String bbswrite(Model model) {
        logger.info("Welcome SistMemberController bbswrite! "+ new Date());
        
        model.addAttribute("doc_title""글 쓰기");
        
        return "bbswrite.tiles";
    }
    
    
    @RequestMapping(value = "bbswriteAf.do", method = RequestMethod.POST)
    public String bbswriteAf(BbsDto bbs, Model model) throws Exception {
        if(bbs.getContent().equals(""|| bbs.getTitle().equals("")){
            return "bbswrite";
        }
        logger.info("Welcome SistMemberController bbswriteAf! "+ new Date());
        khBbsService.writeBbs(bbs);
        return "redirect:/bbslist.do";
    }
cs


12행 : 글쓰기 버튼을 눌렀을때,


19행 : bbswriteAf.do 에서 bbslist.do 로 이동했을때 redirect






regiAF


xml 추가

1
2
<definition name="regi.tiles" template="/WEB-INF/views/login/regi.jsp">
</definition>
cs


컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
    @RequestMapping(value="regiAf.do"
            method={RequestMethod.GET, RequestMethod.POST})
    public String regiAf(MemberDto mem, Model model) throws Exception{
        logger.info("KhMemberController regiAf" + new Date());
        
        boolean b = khMemberService.addMember(mem);
        
        if(b) {
            return "login.tiles";
        }else {
            return "regi.tiles";
        }
    }
cs


Model model객체:  없어도 가능


service

1
2
3
4
5
6
7
8
9
10
11
12
package kh.com.a.service;
 
import kh.com.a.model.MemberDto;
 
public interface KhMemberService {
    
    public int idCheck(String id) throws Exception;
 
    public boolean addMember(MemberDto mem) throws Exception;
/*  public boolean addMember(MemberDto mem);                */
    
}
cs



d

serviceImpl

dao


daoImpl

1
2
3
4
5
6
@Override
    public boolean addMember(MemberDto mem) {
        
        int n = sqlSession.insert(namespace + "addMember", mem);
        return n>0?true:false;
    }
cs


sql.xml

1
2
3
4
<insert id="addMember" parameterType="kh.com.a.model.MemberDto">
    INSERT INTO MEMBER(ID, PWD, NAME, EMAIL, AUTH)
    VALUES(#{id}, #{pwd}, #{name}, #{email}, 3)
</insert>
cs




loginAF


컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@RequestMapping(value="loginAf.do"
            method={RequestMethod.GET, RequestMethod.POST})
    public String loginAf(HttpServletRequest req, MemberDto mem) throws Exception {
        
        logger.info("KhMemberController loginAf" + new Date());
        
        MemberDto login = null;
        // login을 DB 확인
        login = khMemberService.login(mem);
        
        if(login != null && !login.getId().equals("")) {
            req.getSession().setAttribute("login", login);
            return "redirect:/bbslist.do";            
        }else {
            req.getSession().invalidate();
            return "login.tiles";
        //    return "forward:/login.do";
        }        
    }
cs


9행 : // login을 DB 확인

13행 : 서블릿(loginAF.do) 에서 서블릿 (bbslist.do) 로 이동할 때 redirect:/



service

serviceImpl


dao

daoImpl


sql.xml

1
2
3
4
5
6
<select id="login" parameterType="kh.com.a.model.MemberDto"
    resultType="kh.com.a.model.MemberDto">
    SELECT ID, NAME, EMAIL, AUTH
    FROM MEMBER
    WHERE ID=#{id} AND PWD=#{pwd}    
</select>
cs




'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

[MVC] bbsDetail  (0) 2019.02.06
[MVC] bbs write  (0) 2019.01.23
[MVC] ajax로 회원가입시 아이디 중복확인  (0) 2019.01.09
[MVC] 스프링 셋팅 autowired  (0) 2019.01.09
[MVC] 회원가입 제어  (0) 2019.01.09





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<form action="" method="post" id="_regiForm" name="regiForm">
                    
                    <table class="content_table" style="width: 75%">
                    <colgroup>
                        <col style="width:30%">
                        <col style="width:70%">
                    </colgroup>    
                    
                    <tr>
                        <th>아이디첵크</th>
                        <td>
                            <input type="text" id="c_id" size="30">
                            <a href="#none" id="_btnGetId" title="회원가입">
                                <img alt="회원가입" src="img/idcheck.png">
                            </a>
                            <div id="_rgetid"></div>
                        </td>                    
                    </tr>
                    <tr>
                        <th>아이디</th>
                        <td>
                            <input type="text" name="id" id="_userid" size="30" data-msg="아이디를" readonly="readonly">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>패스워드</th>
                        <td>
                            <input type="text" name="pw" id="_pw" size="30" data-msg="패스워드를">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>주소</th>
                        <td>
                            <input type="text" name="address" id="_address" size="30" data-msg="이름을 ">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>핸드폰 번호</th>
                        <td>
                            <input type="text" name="phone" id="_phone" size="30" data-msg="이메일을 ">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>이름</th>
                        <td>
                            <input type="text" name="name" id="_name" size="30" data-msg="이메일을 ">
                        </td>    
                    </tr>
  
                    
                    <tr>
                        <td colspan="2" style="height: 50px; text-align: center">
                        <a href="#none" id="regiBTN" title="회원가입">
                            <img alt="회원가입" src="img/regiBTN.png">
                        </a>
                        
                        <a href="#none" id="logBTN" title="로그인">
                            <img alt="회원가입" src="img/logBTN.png">
                        </a>
                        
                        </td>                    
                    </tr>
                    
                    
                    
                    </table>
                    
                    
</form>
 
cs


js 공백제어 , ajax 실행

1
2
3
4
5
6
7
8
$("#_btnGetId").click(function() {
    var id = $("#c_id").val();
    if(id == ""){
        alert("아이디를 입력해 주십시오");
    }else{
        idCheckFunc(id);
    }    
})
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function idCheckFunc(id) {
    //alert("idCheckFunc");
    
    $.ajax({
        
        type:"post",
        url:"checkID.do",
        async:true,
        data:"id=" + id,
        success:function(msg){
            alert("ajax success")
            idCheckMsg(msg);
        },
         error : function(){
            alert("ajax error");
        }
    });
}    
cs


8행 : 비동기 처리방식인 ajax를 동기방식으로 설정하고 싶을때는 async:false



>>>>>>>.1번 방법 : 

디비결과를 int로 바꾸어 컨트롤러에 보내고, 컨트롤러에서 int값에 따라 message를 set해준다

set한 message를 가지고 regi.jsp에서 새로운 함수(결과에 따라 뷰를 수정)에 값을 보낸다 

새로운 함수는( 아래의 다시js   idCheckMsg


컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@ResponseBody
    @RequestMapping(value="checkID.do", method={RequestMethod.GET, RequestMethod.POST})
    public MemIdCheck checkID(MemberDto mdto) {
        logger.info("MemberController checkID" + new Date());
        
        System.out.println(mdto);
        
        int count  = memberService.checkID(mdto);
        MemIdCheck mic = new MemIdCheck();
        logger.info("checkID.do count: " + count);
        
        if(count>0){
            mic.setMessage("YES");
        }else {
            mic.setMessage("NO");
        }
        
        return mic;
    }
cs

8행 : 디비에 접근하여 mdto(입력한정보) 가 있는지 확인한다

13행 : MemIdCheck 형태의 mic 에다가 setMessage 한다  12행일경우 YES

15행 : MemIdCheck 형태의 mic 에다가 setMessage 한다  12행이 아닐경 경우 NO

18행 : 반환값 mic   ( "YES" 또는 "NO" )



memberService


memberServiceImpl

1
2
3
4
5
6
7
@Override
    public int checkID(MemberDto mem) {
      System.out.println(mem);
      int i = memberDao.checkID(mem);
      System.out.println(i + "i는");
        return memberDao.checkID(mem);
    }
cs

결과메시지 출력할때 쉽게구분할수있도록 int형태로 반환


MemberDao


MemberDaoImpl

1
2
3
4
5
6
7
8
9
10
11
12
@Override
 
    public int checkID(MemberDto mem) {    
        System.out.println("MemberDaoImpl num");
        
        int num = sqlSession.selectOne(namespace + "checkID", mem);
        
        System.out.println("MemberDaoImpl num = " + num);
        
        return num;
    }
    
cs



member.xml

1
2
3
4
5
<select id="checkID" parameterType="kh.com.a.model.MemberDto" resultType="java.lang.Integer">
SELECT NVL(COUNT(*),0)
FROM MEMBER
WHERE ID=#{id}
</select>
cs


id가 존재하면 양수, 그렇지 않으면 음수로 return 

>>결과메시지 출력할때 쉽게구분할수있도록 int형태로 반환



다시 js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function idCheckMsg(msg) {
    
        if(msg.message == 'YES'){
            $("#_rgetid").html("사용할 수 없는 아이디");
            $("#_rgetid").css("margin""2px");
            $("#_rgetid").css("font-family""Nanum Gothic");
            $("#_rgetid").val("");        
        }else{
            $("#_rgetid").html("사용가능 아이디");
            $("#_rgetid").css("margin""2px");
            $("#_rgetid").css("font-family""Nanum Gothic");
            $("#_userid").val( $("#c_id").val() );        
        }        
    
    }
cs





dto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package kh.com.a.model;
 
import java.io.Serializable;
 
/*
DROP TABLE MEMBER
CASCADE CONSTRAINTS;
CREATE TABLE MEMBER(
    ID VARCHAR2(50) PRIMARY KEY,
    PWD VARCHAR2(50) NOT NULL,
    NAME VARCHAR2(50) NOT NULL,
    EMAIL VARCHAR2(50) UNIQUE,
    AUTH NUMBER(1) NOT NULL
);
*/
 
public class MemberDto implements Serializable {
    private String id;
    private String pwd;
    private String name;
    private String email;
    private int auth;    // 사용자/관리자
    
    public MemberDto() {
    }
 
    public MemberDto(String id, String pwd, String name, String email, int auth) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.name = name;
        this.email = email;
        this.auth = auth;
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPwd() {
        return pwd;
    }
 
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public int getAuth() {
        return auth;
    }
 
    public void setAuth(int auth) {
        this.auth = auth;
    }
 
    @Override
    public String toString() {
        return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ",
                email=" + email + ", auth=" + auth + "]";
    }
}
 
 
 
cs



>>>> 두번째 방법

뷰에서(id="_id") 받아온 값을 db에 접근하여 반환된 결과값으로(resultType="Integer")

뷰의 js안에서  if(map.cnt > 0){ }조건을 걸어 결과 처리(idCheckMessage)





컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
@ResponseBody //ajax 사용시
    @RequestMapping(value = "idCheck.do", method = RequestMethod.POST)
    public Map<Object, Object> idCheck(String id) throws Exception {
        logger.info("id 출력확인점1~~~" + id);
        int cnt = 0;
        Map<Object, Object> map = new HashMap<>();
        cnt = khMemberService.idCheck(id);
        logger.info("id 출력확인점2~~~" + cnt);    
        map.put("cnt", cnt);
 
        return map;
    }
cs


xml

1
2
3
4
5
    <select id="idCheck" parameterType="String" resultType="Integer">
        SELECT NVL(COUNT(*), 0)
        FROM MEMBER
        WHERE ID=#{id}    
    </select>
cs


regi.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$("#_btnGetId").click(function() {
    var _id = $("#_id").val();
    if(_id == ""){
        alert("아이디를 입력해 주십시오");
    }else{
        idCheckFunc(_id);
    }    
});
 
function idCheckFunc(id) {
    alert("idCheckFunc 발동");
 
    $.ajax({
        type:"post",
        url:"idCheck.do",
        async:true,
        data:"id=" + id,
        success:function(map){
            idCheckMessage(map);
        }        
    });
}
 
function idCheckMessage(map) {
    if(map.cnt > 0){
        $("#_rgetid").html("사용할 수 없는 아이디입니다");
        $("#_rgetid").css("background-color""#ff0000");
        $("#_rgetid").val("");        
    }else{
        $("#_rgetid").html("사용하실 수 있습니다");
        $("#_rgetid").css("background-color""#0000ff");
        $("#_userid").val( $("#_id").val() );        
    }    
}
cs






'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

[MVC] bbs write  (0) 2019.01.23
[MVC] 회원등록 regiAF , 로그인 loginAF  (0) 2019.01.21
[MVC] 스프링 셋팅 autowired  (0) 2019.01.09
[MVC] 회원가입 제어  (0) 2019.01.09
[mvc] 타일즈 적용  (0) 2019.01.09


autowired : 객체생성없이 사용할 메소드를 호출할수 있도록 해줌



컨트롤러

1
2
@Autowired
    KhMemberService khMemberService;
cs


> dto : Serializable

1
import java.io.Serializable;
cs

>service interface

1
public interface KhMemberService {}
cs

>serviceImpl : 같은 패키지 안에 새로운 패기지 @service , implement ~~{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package kh.com.a.service.Impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import kh.com.a.dao.KhMemberDao;
import kh.com.a.model.MemberDto;
import kh.com.a.service.KhMemberService;
 
@Service
public class KhMemberServiceImpl implements KhMemberService{
 
    @Autowired
    private KhMemberDao khMemberDao;
 
}
cs

>daointerface

1
public interface KhMemberDao {}
cs


>daoImpl: 같은 패키지 안에 새로운 패키지 @Repository , @Autowired SqlSession sqlSession; , private String namespace = "MemberSql.";

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package kh.com.a.dao.Impl;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import kh.com.a.dao.KhMemberDao;
import kh.com.a.model.MemberDto;
 
@Repository
public class KhMemberDaoImpl implements KhMemberDao{
 
    @Autowired
    SqlSession sqlSession;
 
    private String namespace = "MemberSql.";
}
cs

>sqls .xml <mapper namespace="MemberSql"></mapper>

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -->
 
   
<mapper namespace="MemberSql">
 
 
</mapper>
cs

>sql작성

아이디 찾기

비밀번호찾기



특수문자 입력제한

1
2
3
4
5
6
7
8
9
10
11
$(document).ready(function() {
    $("input[name=name]").keyup(function(event){
     regexp = /[\[\]{}()<>?|`~!@#$%^&*-_+=,.;:\"'\\]/g;
     v = $(this).val();
     if( regexp.test(v) ) {
      alert("특수문자는 입력하실 수 없습니다");
      $(this).val(v.replace(regexp,''));
     }
    });
   });
cs


아이디 입력제한


비밀번호 입력제한

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//비밀번호 입력제한
$(function(){
   
    $("#alert-success").hide();
    $("#alert-danger").hide();
    $("input").keyup(function(){
        var pwd=$("#_pw").val();
        var pwdCheck=$("#_pwck").val();
        if(pwd != "" || pwdCheck != ""){
            if(pwd == pwdCheck){
                $("#alert-success").show();
                $("#alert-danger").hide();
                $("#submit").removeAttr("disabled");
            }else{
                $("#alert-success").hide();
                $("#alert-danger").show();
                $("#submit").attr("disabled""disabled");
            }    
        }
    });
});
cs



연락처 입력제한

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//연락처 입력제한
var phone =document.getElementById('_phone');
phone.onkeyup = function(event){
event = event || window.event;
var _val = this.value.trim();
this.value = autoHypenPhone(_val) ;
};
function autoHypenPhone(str) {
str = str.replace(/[^0-9]/g, '');
var tmp = '';
if (str.length < 4) {
   return str;
else if (str.length < 7) {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(3);
   return tmp;
else if (str.length < 11) {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(33);
   tmp += '-';
   tmp += str.substr(6);
   return tmp;
else {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(34);
   tmp += '-';
   tmp += str.substr(7);
   return tmp;
}
return str;
}
cs



주소검색1   우편번호검색없음


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!-- 주소검색 -->
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 API KEY를 사용하세요&libraries=services"></script>
 
<script>
    var mapContainer = document.getElementById('map'), // 지도를 표시할 div
        mapOption = {
            center: new daum.maps.LatLng(37.537187127.005476), // 지도의 중심좌표
            level: 5 // 지도의 확대 레벨
        };
    //지도를 미리 생성
    var map = new daum.maps.Map(mapContainer, mapOption);
    //주소-좌표 변환 객체를 생성
    var geocoder = new daum.maps.services.Geocoder();
    //마커를 미리 생성
    var marker = new daum.maps.Marker({
        position: new daum.maps.LatLng(37.537187127.005476),
        map: map
    });
    function execDaumPostcode() {
        new daum.Postcode({
            oncomplete: function(data) {
                // 각 주소의 노출 규칙에 따라 주소를 조합한다.
                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
                var fullAddr = data.address; // 최종 주소 변수
                var extraAddr = ''// 조합형 주소 변수
                // 기본 주소가 도로명 타입일때 조합한다.
                if(data.addressType === 'R'){
                    //법정동명이 있을 경우 추가한다.
                    if(data.bname !== ''){
                        extraAddr += data.bname;
                    }
                    // 건물명이 있을 경우 추가한다.
                    if(data.buildingName !== ''){
                        extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
                    }
                    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
                    fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
                }
                // 주소 정보를 해당 필드에 넣는다.
                document.getElementById("_address").value = fullAddr;
                // 주소로 상세 정보를 검색
                geocoder.addressSearch(data.address, function(results, status) {
                    // 정상적으로 검색이 완료됐으면
                    if (status === daum.maps.services.Status.OK) {
                        var result = results[0]; //첫번째 결과의 값을 활용
                        // 해당 주소에 대한 좌표를 받아서
                        var coords = new daum.maps.LatLng(result.y, result.x);
                        // 지도를 보여준다.
                        mapContainer.style.display = "block";
                        map.relayout();
                        // 지도 중심을 변경한다.
                        map.setCenter(coords);
                        // 마커를 결과값으로 받은 위치로 옮긴다.
                        marker.setPosition(coords)
                    }
                });
            }
        }).open();
    }
</script> 
cs



0. layouts.xml 준비


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles
 Configuration 3.0//ENhttp://tiles.apache.org/dtds/tiles-config_3_0.dtd">
 
<tiles-definitions>
     <definition name="login.tiles" template="/WEB-INF/views/home.jsp">
    </definition>
<!-- 
<definition name="login.tiles" template="/WEB-INF/views/login/login.jsp">
</definition>
<definition name="bbslist.tiles" template="/WEB-INF/views/layouts-tiles.jsp">
    <put-attribute name="common" value="/WEB-INF/views/common/common.jsp"/>
    <put-attribute name="header" value="/WEB-INF/views/common/header.jsp"/>
    <put-attribute name="top_inc" value="/WEB-INF/views/common/top.jsp"/>
    <put-attribute name="top_menu" value="/WEB-INF/views/common/top_menu.jsp"/>
    <put-attribute name="left_main" value="/WEB-INF/views/common/left_bbslist.jsp"/>
    <put-attribute name="main" value="/WEB-INF/views/bbs/bbslist.jsp"/>
    <put-attribute name="bottom_inc" value="/WEB-INF/views/common/bottom.jsp"/>
</definition>
<definition name="bbswrite.tiles" extends="bbslist.tiles">
    <put-attribute name="main" value="/WEB-INF/views/bbs/bbswrite.jsp"/>
</definition>
-->
 
</tiles-definitions>
 
cs


20행 : 같은 템플릿 (layouts-tiles.jsp)을 사용할 경우(11행 , 22행 )extends

*템플릿으로 사용할경우 해당 jsp 파일에 추가

1
2
3
4
5
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
cs




1. xml 설정 


1.1 pom.xml 에 타일즈3 dependency 추가


1.2 servlet-context ( dispatcher servlet , sts : app servlet)  resolver 설정 , 레이아웃 위치 정의( 0번 연결)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- tiles 설정 : tiles 설정 -->
 
 <bean id="tilesConfigurer" class ="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
 
  <property name="definitions">
 
   <list>
 
    <value>/WEB-INF/views/layouts.xml</value>
 
   </list>
 
  </property>
 
 </bean>
 
 <!-- tiles 설정 "viewResolver 설정 -->
 
 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
 
  <property name="requestContextAttribute" value="requstContext"/>
 
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></property>
 
 </bean>
cs



2. web.xml 에 appservlet경로 정의

스프링 셋팅때 되어있음


2. 컨트롤러 

1
2
3
4
5
@RequestMapping(value="login.do", method=RequestMethod.GET)
    public String login(Model model) {
        logger.info("KhMemberController login" + new Date());
        return "login.tiles";
    }
cs

4행 : tiles 로 이동




3. 뷰 생성

상단에 소스 추가

login.jsp

1
2
3
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
cs



+ Recent posts