<수치형 바인드 처리>

​<JSP 작성>

<h4>수치형 바인드 처리</h4>
<form:form modelAttribute="command" action="${appUrl}/test/customizeNumberBind.html" method="post">
   
    <p>
        <form:label path="amount">합계</form:label>
        <form:input path="amount" />
        <form:errors path="amount" cssClass="errors" />
    </p>
   
    <p>
        <form:label path="average">평균</form:label>
        <form:input path="average" />
        <form:errors path="average" cssClass="errors" />
    </p>
   
    <input type="submit"/>
</form:form>
 

 

 

 

 

 



<수치형 바인드 처리> 


<controller 작성>


import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
 
@Controller
@RequestMapping("/test/customizeNumberBind")
public class CustomizeNumberBindController {    
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
       
        // 이름을 지정하여 바인드 처리
        NumberFormat amountFormat = NumberFormat.getInstance();
        binder.registerCustomEditor(Long.class, "amount",
                new CustomNumberEditor(Long.class, amountFormat, true));
       
        // 타입을 지정하여 바인드 처리
        DecimalFormat doubleFormat = new DecimalFormat("###,###.###");
        binder.registerCustomEditor(Double.class,
                new CustomNumberEditor(Double.class, doubleFormat, true));
                 //DecimalFormat도 사용가능하다
              }
   
    // @RequestMapping 등 생략


 

 

 

 

 



<수치형 바인드 처리>

​<command 클래스 작성>


public class CustomizeNumberBindCommand implements Serializable {
   
    /** serialVersionUID */
    private static final long serialVersionUID = 1L;
 
    private Long amount;
   
    private Double average;
   
    public CustomizeNumberBindCommand() {
       
    }
   
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
   
    // setter, getter 생략
   
}


 

 

 

 

[/AutoComplete.jsp]



<%@ page contentType="text/html; charset=EUC-KR"%>
<html>
<head>
<title>autoComplete</title>
<script type="text/javascript" src="ajax.js"></script>
<script>

        var div;
        var table;
        var text;

        /*
         * 변수값 초기화
         */
        function onLoad(){

                div = document.getElementById("autoCompleteDiv");
                table = document.getElementById("autoCompleteTable");
                text = document.getElementById("autoCompleteText");

        }



        /*
         * 조회
         */
        function listAutoComplete(){

                if(text.value != ""){

                        if(event.keyCode != 229){


                                var url = "autoComplete.action?word=" + text.value;

                                AutoComplete.ContentLoader(url, viewTitleList);

                        }

                }else{

                        clearTitleList();

                }

        }



/*
         * 테이블을 DHTML로 작성
         */
        function viewTitleList(){
                clearTitleList();
                if(AutoComplete.getState()){ //데이터의 전부를 받은 상태
                        var tr, td;
                        var words = xmlHttp.responseXML.getElementsByTagName("word");
                        var size = words.length;
                        for(var i = 0 ; i < size ; i++){
                                tr = table.insertRow();
                                tr.style.width = "100%“;
                                td = tr.insertCell();
                        td.style.width = "100%";
                        td.style.cursor = "hand";

                        td.innerText = words[i].firstChild.nodeValue;
                                td.onclick = function() { wordClick(this);};
                        td.onmouseover = function() { mouseOver(this);};
                                td.onmouseout = function() { mouseout(this);};

                        }
                }
        }


/*
         * 테이블의 목록을 초기화
         */
        function clearTitleList(){

                var ind = table.rows.length;
        for (var i = ind - 1; i >= 0 ; i--) {

            table.deleteRow(i);

        }
        }
        /*
         * 클릭시
         */
        function wordClick(oTd){

                text.value = oTd.innerText;

        }
        /*
         * 마우스오버
         */
        function mouseOver(td){
                td.style.background= "#CBE7BA“;
        }



/*
         * 마우스아웃
         */
        function mouseout(td){
                td.style.background= "#FFFFFF“;
        }

</script>
</head>
<body onLoad="onLoad()">
<input type="text" id="autoCompleteText" style="width:200px" autocomplete="off" onkeyup="javascript:listAutoComplete()"><br>
<div id="autoCompleteDiv" style="position:absolute; width:200px; height:180px; scrolling:yes; overflow-y:auto;">
        <table id="autoCompleteTable" style="width:100%"></table>
</div>
</body>
</html>

 

 

 

 

 

 

 

[/WEB-INF/src/web/ajax/AjaxAction.java]



package web.ajax;
import javax.servlet.http.*;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.*;
import com.opensymphony.xwork2.ActionSupport;

public class AjaxAction extends ActionSupport implements ServletRequestAware, ServletResponseAware {

        private HttpServletRequest request;
        private HttpServletResponse response;
    private Logger logger = Logger.getLogger(this.getClass());

   public String autoComplete() throws Exception {

            try{

                    logger.info("autoComplete start");



String[] wordArr = {"acrobat“,                                                "adobe“,                                                "bmw",
                                                "brave“,                                                "cbs“,                                                "cnn",
                                                "heaven“,                                                "html“,                                                "kbs",
                                                "key“,                                                "net“,                                                "news",
                                                "queen“,                                                "quick“,                                                "soup",
                                                "super“,                                                "ufo“,                                                "usb",
                                                "work“,                                                "wow“,                                                "zebra",
                                                "zenith"};
                    StringBuffer xmlStr = new StringBuffer("");
                    boolean isTitleExist = false;

                    //실제업무에서는 비지니스 레이어에서 XML String을 구현한다.
                    //String xmlStr = ajax.getAutoCompleteTitleList(boardVO);

                    xmlStr.append("<?xml version=\"1.0\" encoding=\"EUC-KR\"?>");
                    xmlStr.append("<words>");
for(int i = 0;  i < wordArr.length ; i++){

                            if(wordArr[i].indexOf(request.getParameter("word")) != -1){

                                    xmlStr.append("<word>");
                                    xmlStr.append(wordArr[i]);
                                    xmlStr.append("</word>");
                                    isTitleExist = true;
                            }

                    }


xmlStr.append("</words>");
                    //logger.info("request.getParameter(\"title\") : " + request.getParameter("title"));
                    logger.info("xmlStr.toString() : " + xmlStr.toString());
                    if(isTitleExist){
                            response.setContentType("text/xml");
                        response.setHeader("Cache-Control", "no-cache");
                        response.getWriter().write(xmlStr.toString());
                    }else{
                            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
                    }
                    logger.info("forward :" + request.getParameter("forward"));
                    logger.info("autoComplete end");
                    return null;
            }catch(Exception e){
                        logger.info("Error : " + e.toString());
                        e.printStackTrace();
                        throw e;
                }    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
        public void setServletResponse(HttpServletResponse response) {
                this.response = response;
        }
}

 

 

 

 

 

 

 

 

 

 

 

[/WEB-INF/src/log4j.xml] 




<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration xmlns='http://logging.apache.org/'>
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%p - %C{1}.%M(%L) | %m%n"/>
        </layout>
    </appender>

    <logger name="org.apache">
        <level value="WARN"/>
    </logger>

    <logger name="org.springframework">
        <level value="DEBUG"/>
    </logger>

    <logger name="springJDBC">
        <level value="DEBUG"/>
    </logger>

    <root>
        <level value="WARN"/>
<appender-ref ref="CONSOLE"/>
    </root>
</configuration> 

 



『 날짜형 바인드 (에러 메시지 정의) 』

# 필드명에 해당 에러메시지
typeMismatch.startDate={0}는 날짜 형식(yyyy/MM/dd)을

입력해 주십시오.
 
# 다른 형식을 경우
typeMismatch.java.util.Date={0}는 날짜 형식이 올바르지 않습니다.
 
## 형 변환 에러 메시지
typeMismatch={0}는 입력형식이 잘못 되었습니다.
 
## 필드명 정의
startDate=시작일자

 

 

 


endDate=종료일자

 

 

 

 

 



『 날짜형 바인드 (JSP 작성) 』

​<JSP 작성>

​<h4>바인드 </h4>
<form:form modelAttribute="command" action="${appUrl}/test/customizeDateBind.html" method="post">
   
    <p>
        <form:label path="startDate">시작일자</form:label>
        <form:input path="startDate" />
        <form:errors path="startDate" cssClass="errors" />
    </p>
   
    <p>
        <form:label path="endDate">종료일자</form:label>
        <form:input path="endDate" />
        <form:errors path="endDate" cssClass="errors" />
    </p>
   
    <input type="submit"/>
</form:form>

 

 

 

 

+ Recent posts