<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>songi_jeon</title>
        <link>https://velog.io/</link>
        <description>비전공자가 백엔드 개발자 도전하는 블로그</description>
        <lastBuildDate>Mon, 03 May 2021 07:44:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>songi_jeon</title>
            <url>https://images.velog.io/images/songi_jeon/profile/4a03829a-bf96-48eb-8862-8d81a6ee218c/0_00.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. songi_jeon. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/songi_jeon" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2021/05/03]]></title>
            <link>https://velog.io/@songi_jeon/20210503</link>
            <guid>https://velog.io/@songi_jeon/20210503</guid>
            <pubDate>Mon, 03 May 2021 07:44:41 GMT</pubDate>
            <description><![CDATA[<h3 id="select-box-onchange-속성">select box onchange 속성</h3>
<p>select box의 옵션 값 변경 시 사용하는 onchange 속성으로 함수를 바로 호출 가능</p>
<pre><code>&lt;form:select path=&quot;researchList[0].reType&quot; id=&quot;researchList[0].reType&quot; onchange=&quot;chageLangSelect(&#39;1&#39;)&quot; title=&quot;설문 타입&quot; cssClass=&quot;w100&quot;&gt;
  &lt;form:option value=&quot;0&quot; label=&quot;라디오박스&quot;/&gt;
  &lt;form:option value=&quot;1&quot; label=&quot;이미지&quot;/&gt;
  &lt;form:option value=&quot;2&quot; label=&quot;체크박스&quot;/&gt;
&lt;/form:select&gt;</code></pre><h4 id="onchange-속성--thisvalue">onchange 속성 : this.value</h4>
<p>this.value를 사용하면 선택된 selectBox 값이 파라미터로 넘어감</p>
<pre><code>&lt;select id=&quot;text_id&quot; onChange=&quot;test.testFunction(&#39; + id + &#39;, this.value)&quot;&gt; &lt;option value=&quot;1&quot; selected&gt;테스트1&lt;/option&gt; &lt;option value=&quot;2&quot;&gt;테스트2&lt;/option&gt; &lt;option value=&quot;3&quot;&gt;테스트3&lt;/option&gt; &lt;/select&gt;
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[jsp 오류]]></title>
            <link>https://velog.io/@songi_jeon/jsp-%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@songi_jeon/jsp-%EC%98%A4%EB%A5%98</guid>
            <pubDate>Mon, 03 May 2021 07:20:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="오류-내용">오류 내용:</h4>
<p>java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name &#39;researchList[${num}]&#39; available as request attribute</p>
</blockquote>
<h4 id="상황">상황:</h4>
<p>select박스 값이 변동되면 onchange로 바로 함수를 호출해서 innerHtml로 용도에 맞게 테이블을 변경하려고 했다.</p>
<pre><code class="language-js">//selectBox가 변경시 이벤트 감지
function chageLangSelect(num,selectVal){
    var tableId = &quot;search_table_&quot;+num;                //테이블 id
    var selectId = &quot;researchList[&quot;+num+&quot;].reType&quot;;    //셀렉트 박스 id

    if (selectVal == &#39;0&#39;) {
        alert(&quot;라디오박스&quot;);

         var innerHtml =`
                        &lt;table class=&quot;tbl_row_type01&quot; id=&quot;search_table_\${num}&quot;&gt; 
                            &lt;caption&gt;내용(제목, 작성자, 작성일 등으로 구성)&lt;/caption&gt;
                            &lt;colgroup&gt;
                                &lt;col style=&quot;width:20%;&quot;&gt;
                                &lt;col style=&quot;width:30%;&quot;&gt;
                                &lt;col style=&quot;width:20%;&quot;&gt;
                                &lt;col style=&quot;width:30%;&quot;&gt;
                            &lt;/colgroup&gt; 
                            &lt;tbody id=&quot;sub_tbody_\${num}&quot;&gt;
                                &lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 타입&lt;/strong&gt;&lt;/th&gt;
                                    &lt;td colspan=&quot;3&quot;&gt;
                                        &lt;select name=&quot;researchList[\${num}].reType&quot; id=&quot;researchList[\${num}].reType&quot; onchange=&quot;chageLangSelect(&#39;\${num}&#39;,this.value)&quot; title=&quot;설문 타입&quot; cssClass=&quot;w100&quot;&gt;
                                            &lt;option value=&quot;0&quot; label=&quot;라디오박스&quot; selected=&quot;selected&quot;/&gt;
                                            &lt;option value=&quot;1&quot; label=&quot;이미지&quot;/&gt;
                                            &lt;option value=&quot;2&quot; label=&quot;체크박스&quot;/&gt;
                                        &lt;/select&gt;
                                    &lt;/td&gt;
                                &lt;/tr&gt;
                                &lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 제목&lt;/strong&gt;&lt;/th&gt;
                                    &lt;td colspan=&quot;3&quot;&gt;
                                        &lt;input type=&quot;text&quot; name=&quot;researchList[\${num}].reTitle&quot; class=&quot;text w50p&quot; required=&quot;required&quot;  maxlength=&quot;50&quot;/&gt;
                                        &lt;a href=&quot;#&quot; class=&quot;btn btn_mdl btn_save&quot; onclick=&quot;fncAdd(&#39;\${num}&#39;);&quot;&gt;항목 추가&lt;/a&gt;
                                    &lt;/td&gt;
                                &lt;/tr&gt;
                                &lt;tr id=&quot;add_tr_1&quot;&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 내용&lt;/strong&gt;&lt;/th&gt;
                                    &lt;td colspan=&quot;3&quot; class=&quot;search_cont&quot;&gt;
                                        &lt;input type=&quot;radio&quot; name=&quot;researchList[0].check&quot; id=&quot;researchList[0].check&quot; value=&quot;0&quot; /&gt;
                                        &lt;input type=&quot;text&quot; name=&quot;researchList[0].reCont&quot; id=&quot;researchList[0].reCont&quot; class=&quot;text w50p&quot; required=&quot;required&quot;  maxlength=&quot;50&quot;/&gt;
                                        &lt;a href=&quot;#&quot; class=&quot;btn btn_i_del&quot; onclick=&quot;fncDel(&#39;1&#39;,&#39;1&#39;);&quot;&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;/a&gt;
                                    &lt;/td&gt; 
                                &lt;/tr&gt;
                                &lt;tr id=&quot;add_tr_2&quot;&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;/th&gt;
                                    &lt;td colspan=&quot;3&quot; class=&quot;search_cont&quot;&gt;
                                        &lt;input type=&quot;radio&quot; name=&quot;researchList[1].check&quot; id=&quot;researchList[1].check&quot; value=&quot;0&quot; /&gt;
                                        &lt;input type=&quot;text&quot; name=&quot;researchList[1].reCont&quot; id=&quot;researchList[1].reCont&quot; class=&quot;text w50p&quot; required=&quot;required&quot;  maxlength=&quot;50&quot;/&gt;
                                        &lt;a href=&quot;#&quot; class=&quot;btn btn_i_del&quot; onclick=&quot;fncDel(&#39;1&#39;,&#39;2&#39;);&quot;&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;/a&gt;
                                    &lt;/td&gt; 
                                &lt;/tr&gt;
                            &lt;/tbody&gt;
                        &lt;/table&gt;
                        `; 
        $(&quot;#research_tables&gt;tbl_wrap:last&quot;).append(innerHtml);
    }

}</code></pre>
<pre><code class="language-html">&lt;table class=&quot;tbl_row_type01&quot; id=&quot;search_table_1&quot;&gt; 
    &lt;caption&gt;내용(제목, 작성자, 작성일 등으로 구성)&lt;/caption&gt;
    &lt;colgroup&gt;
        &lt;col style=&quot;width:20%;&quot;&gt;
        &lt;col style=&quot;width:30%;&quot;&gt;
        &lt;col style=&quot;width:20%;&quot;&gt;
        &lt;col style=&quot;width:30%;&quot;&gt;
    &lt;/colgroup&gt; 
    &lt;tbody id=&quot;sub_tbody_1&quot;&gt;
        &lt;tr&gt;
            &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 타입&lt;/strong&gt;&lt;/th&gt;
            &lt;td colspan=&quot;3&quot;&gt;
                &lt;form:select path=&quot;researchList[0].reType&quot; id=&quot;researchList[0].reType&quot; onchange=&quot;chageLangSelect(&#39;1&#39;,this.value)&quot; title=&quot;설문 타입&quot; cssClass=&quot;w100&quot;&gt;
                    &lt;form:option value=&quot;0&quot; label=&quot;라디오박스&quot;/&gt;
                    &lt;form:option value=&quot;1&quot; label=&quot;이미지&quot;/&gt;
                    &lt;form:option value=&quot;2&quot; label=&quot;체크박스&quot;/&gt;
                &lt;/form:select&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 제목&lt;/strong&gt;&lt;/th&gt;
            &lt;td colspan=&quot;3&quot;&gt;
                &lt;input type=&quot;text&quot; name=&quot;researchList[0].reTitle&quot; class=&quot;text w50p&quot; required=&quot;required&quot;  maxlength=&quot;50&quot;/&gt;
                &lt;a href=&quot;#&quot; class=&quot;btn btn_mdl btn_save&quot; onclick=&quot;fncAdd(&#39;1&#39;);&quot;&gt;항목 추가&lt;/a&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr id=&quot;add_tr_1&quot;&gt;
            &lt;th scope=&quot;row&quot;&gt;&lt;strong class=&quot;th_tit&quot;&gt;설문 내용&lt;/strong&gt;&lt;/th&gt;
            &lt;td colspan=&quot;3&quot; class=&quot;search_cont&quot;&gt;
                &lt;input type=&quot;radio&quot; name=&quot;researchList[0].check&quot; id=&quot;researchList[0].check&quot; value=&quot;0&quot; /&gt;
                &lt;input type=&quot;text&quot; name=&quot;researchList[0].reCont&quot; id=&quot;researchList[0].reCont&quot; class=&quot;text w50p&quot; required=&quot;required&quot;  maxlength=&quot;50&quot;/&gt;
                &lt;a href=&quot;#&quot; class=&quot;btn btn_i_del&quot; onclick=&quot;fncDel(&#39;1&#39;,&#39;1&#39;);&quot;&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;/a&gt;
            &lt;/td&gt; 
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</code></pre>
<h3 id="해결">해결</h3>
<p>문제는 innerHtml에 form:form 태그가 새용되면서 오류가 난 것.
<strong>- 변경 전 -</strong></p>
<pre><code class="language-html">&lt;form:select path=&quot;researchList[\${num}].reType&quot; id=&quot;researchList[\${num}].reType&quot; onchange=&quot;chageLangSelect(&#39;\${num}&#39;,this.value)&quot; title=&quot;설문 타입&quot; cssClass=&quot;w100&quot;&gt;
  &lt;form:option value=&quot;0&quot; label=&quot;라디오박스&quot; selected=&quot;selected&quot;/&gt;
  &lt;form:option value=&quot;1&quot; label=&quot;이미지&quot;/&gt;
  &lt;form:option value=&quot;2&quot; label=&quot;체크박스&quot;/&gt;
&lt;/form:select&gt;</code></pre>
<p><strong>- 변경 후 -</strong></p>
<pre><code class="language-html">&lt;select name=&quot;researchList[\${num}].reType&quot; id=&quot;researchList[\${num}].reType&quot; onchange=&quot;chageLangSelect(&#39;\${num}&#39;,this.value)&quot; title=&quot;설문 타입&quot; cssClass=&quot;w100&quot;&gt;
  &lt;option value=&quot;0&quot; label=&quot;라디오박스&quot; selected=&quot;selected&quot;/&gt;
  &lt;option value=&quot;1&quot; label=&quot;이미지&quot;/&gt;
  &lt;option value=&quot;2&quot; label=&quot;체크박스&quot;/&gt;
&lt;/select&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]다수 input값 Controller에서 배열로 받기]]></title>
            <link>https://velog.io/@songi_jeon/JAVA%EB%8B%A4%EC%88%98-input%EA%B0%92-Controller%EC%97%90%EC%84%9C-%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%B0%9B%EA%B8%B0</link>
            <guid>https://velog.io/@songi_jeon/JAVA%EB%8B%A4%EC%88%98-input%EA%B0%92-Controller%EC%97%90%EC%84%9C-%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%B0%9B%EA%B8%B0</guid>
            <pubDate>Wed, 28 Apr 2021 02:06:01 GMT</pubDate>
            <description><![CDATA[<h3 id="사용-상황">사용 상황</h3>
<p>동적으로 늘릴 수 있는 input창
<img src="https://images.velog.io/images/songi_jeon/post/4681221e-d51e-4733-90ac-8f7cdd59a3af/01.PNG" alt=""></p>
<h3 id="jsp">jsp</h3>
<p>name에 인덱스를 붙여서 구분하지 않아도 되는 점이 포인트, 같은 이름이 중복되어도 된다는 것</p>
<pre><code class="language-JAVA">  &lt;td&gt;
      &lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;name_1&quot; class=&quot;text&quot;/&gt;
  &lt;/td&gt;
  &lt;td&gt;
      &lt;input type=&quot;text&quot; name=&quot;grade&quot; id=&quot;grade_1&quot; class=&quot;text&quot;/&gt;
  &lt;/td&gt;
  &lt;td&gt;
      &lt;input type=&quot;text&quot; name=&quot;dept&quot; id=&quot;dept_1&quot; class=&quot;text&quot;/&gt;
  &lt;/td&gt;
  &lt;td&gt;
    &lt;input type=&quot;text&quot; name=&quot;tel&quot; id=&quot;tel_1&quot; class=&quot;text&quot;/&gt;
  &lt;/td&gt;</code></pre>
<h3 id="controller">Controller</h3>
<p>중복이 되어도 controller에서 배열로 알아서 담기게 된다.</p>
<pre><code>String[] arrName = request.getParameterValues(&quot;name&quot;);</code></pre><p><a href="https://jeanette.tistory.com/62">참고사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] insert 후 sequence 값 반환]]></title>
            <link>https://velog.io/@songi_jeon/MySQL-insert-%ED%9B%84-sequence-%EA%B0%92-%EB%B0%98%ED%99%98</link>
            <guid>https://velog.io/@songi_jeon/MySQL-insert-%ED%9B%84-sequence-%EA%B0%92-%EB%B0%98%ED%99%98</guid>
            <pubDate>Wed, 28 Apr 2021 00:50:00 GMT</pubDate>
            <description><![CDATA[<h3 id="selectkey-속성">selectKey 속성</h3>
<ol>
<li>keyProperty
 selectKey에서 결과값을 리턴받을 변수명
 selectKey를 여러개 사용하고 싶은 경우 &#39;,&#39;를 이용해 작성 가능
 (*주의사항: keyProperty = &quot;A, B, C&quot; 절대 띄어쓰기 하지 않기 =&gt;  keyProperty = &quot;A,B,C&quot;)</li>
<li>resultType
 selectKey에서 리턴을 받을 데이터 타입</li>
<li>order: 
 selectkey를 언제 실행 할지 정함 
 insert나 update 전 BEFORE, insert나 update 후 AFTER</li>
</ol>
<p>반환 값은 parameterType으로 담긴다.</p>
<pre><code class="language-sql">    &lt;insert id=&quot;insertContents&quot; parameterType=&quot;boardVO&quot; &gt;
        &lt;selectKey keyProperty=&quot;seq&quot; resultType=&quot;String&quot; order=&quot;BEFORE&quot;&gt;
            SELECT IFNULL(MAX(TS.SEQ)+1,1) FROM t_dept TS
        &lt;/selectKey&gt;
        &lt;![CDATA[
            INSERT INTO t_dept(
                       SEQ 
                , TITLE 
                , CONT
                , RGST_ID 
                , ATCH_FILE_ID 
            )
            VALUES (
                 (SELECT IFNULL(MAX(TS.SEQ)+1,1) FROM t_dept TS)
                ,#{title ,jdbcType=VARCHAR}
                ,#{cont ,jdbcType=VARCHAR}
                ,#{loginSeq ,jdbcType=VARCHAR}
                ,#{atchFileId ,jdbcType=VARCHAR}
            )
        ]]&gt;
    &lt;/insert&gt;</code></pre>
<p><a href="https://m.blog.naver.com/vivacarla/222098469089">참조사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021/04/15 - 공부 ]]></title>
            <link>https://velog.io/@songi_jeon/20210415-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/20210415-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Thu, 15 Apr 2021 08:07:52 GMT</pubDate>
            <description><![CDATA[<h3 id="instanceof-연산자">instanceof 연산자</h3>
<p>객체 타입을 확인하는데 사용. 
참조 변수가 피연산자로 변환이 가능한지 불가능한지 true false로 판별함.</p>
<pre><code>참조변수 instanceof 타입(클래스명) 피연산자로</code></pre><p>연산결과가 true를 얻으면 참조변수가 검사한 타입으로 형변환 가능.</p>
<p><strong>예시</strong></p>
<pre><code class="language-java">class A {

}
class B extends A{

}

public class Test {
    public static void main(String[] args) {
        A a = new B();        
        B b = new B();
        if( b instanceof A){
            System.out.println(&quot;변환 가능&quot;);
        }else{
            System.out.println(&quot;변환 불가능&quot;);
        }
        System.out.println(&quot;===============&quot;);
        if( a instanceof B){
            System.out.println(&quot;변환 가능&quot;);
        }else{
            System.out.println(&quot;변환 불가능&quot;);
        }
        System.out.println(&quot;===============&quot;);

        A a1 = new A();
        if( a1 instanceof A){
            System.out.println(&quot;변환 가능&quot;);
        }else{
            System.out.println(&quot;변환 불가능&quot;);
        }
        System.out.println(&quot;===============&quot;);
        if( a1 instanceof B){
            System.out.println(&quot;변환 가능&quot;);
        }else{
            System.out.println(&quot;변환 불가능&quot;);
        }
        System.out.println(&quot;===============&quot;);

    }
}</code></pre>
<p><strong>결과</strong></p>
<pre><code>변환가능
===============
변환가능
===============
변환가능
===============
변환불가능
===============</code></pre><p>instanceof 연산자는 객체가 어떤 타입인지 조사할 때 사용하며, 주로 강제 타입 변환 전에 변환이 가능한지 조사할 때 사용</p>
<p><a href="https://arabiannight.tistory.com/313">참조사이트1</a>
<a href="https://cometome1004.tistory.com/48">참조사이트2</a></p>
<h3 id="sql-공부-사이트">SQL 공부 사이트</h3>
<p><a href="https://sqlzoo.net/">https://sqlzoo.net/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 동적쿼리 오류]]></title>
            <link>https://velog.io/@songi_jeon/SQL-%EB%8F%99%EC%A0%81%EC%BF%BC%EB%A6%AC-%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@songi_jeon/SQL-%EB%8F%99%EC%A0%81%EC%BF%BC%EB%A6%AC-%EC%98%A4%EB%A5%98</guid>
            <pubDate>Mon, 12 Apr 2021 00:29:39 GMT</pubDate>
            <description><![CDATA[<h3 id="원인">원인</h3>
<p>검색을 위한 동적 쿼리가 작동하지 않았다.</p>
<pre><code class="language-SQL">        &lt;if test=&quot;schEtc01 != null and schEtc01 !=&#39;&#39; and schEtc01 ==&#39;0&#39;&quot;&gt;
            &lt;if test=&quot;searchStartDate != null and searchStartDate != &#39;&#39;&quot;&gt;
                AND RGST_DT &amp;gt;= #{searchStartDate}
            &lt;/if&gt;
            &lt;if test=&quot;searchEndDate != null and searchEndDate != &#39;&#39;&quot;&gt;
                AND RGST_DT &amp;lt;= #{searchEndDate}
            &lt;/if&gt;
        &lt;/if&gt;</code></pre>
<h3 id="해결">해결</h3>
<p>if 조건절에서 값에는 홑따옴표를 사용하지 않아도 된다.</p>
<pre><code class="language-sql">&lt;if test=&quot;schEtc01 != null and schEtc01 !=&#39;&#39; and schEtc01 ==0&quot;&gt;&lt;/if&gt;</code></pre>
<p><img src="https://images.velog.io/images/songi_jeon/post/82bdacf8-4dfb-404a-8df3-224aded55e03/%EA%B2%80%EC%83%89%EC%82%AC%EC%A7%84.JPG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바에서 날짜 구하기]]></title>
            <link>https://velog.io/@songi_jeon/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-%EB%82%A0%EC%A7%9C-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@songi_jeon/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-%EB%82%A0%EC%A7%9C-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 09 Apr 2021 06:14:53 GMT</pubDate>
            <description><![CDATA[<p>java에서 날짜 구하는 Calendar 객체
날짜를 형식화하고 구문 분석하는 공용 클래스 SimpleDateFormat</p>
<pre><code class="language-java">
        // 한 달 전
        Calendar mon = Calendar.getInstance();
        mon.add(Calendar.MONTH , -1);
        String beforeMonth = new java.text.SimpleDateFormat(&quot;yyyy.MM.dd&quot;).format(mon.getTime());
        System.out.println(beforeMonth);
        //오늘
        Calendar day = Calendar.getInstance();
        day.add(Calendar.DATE , 0);
        String toDay = new java.text.SimpleDateFormat(&quot;yyyy.MM.dd&quot;).format(day.getTime());
        System.out.println(toDay);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-3lwpgcyv</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-3lwpgcyv</guid>
            <pubDate>Mon, 05 Apr 2021 08:55:50 GMT</pubDate>
            <description><![CDATA[<h3 id="error-querying-database--cause-javalangillegalargumentexception-mapped-statements-collection-does-not-contain-value-for-comopenmenuf_3selectreplylist">Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.open.MenuF_3.selectReplyList</h3>
<h3 id="cause-javalangillegalargumentexception-mapped-statements-collection-does-not-contain-value-for-comopenmenuf_3selectreplylist">Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.open.MenuF_3.selectReplyList</h3>
<p>org.apache.ibatis.exceptions.PersistenceException: </p>
<h3 id="error-querying-database--cause-javalangillegalargumentexception-mapped-statements-collection-does-not-contain-value-for-comopenmenuf_3selectreplylist-1">Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.open.MenuF_3.selectReplyList</h3>
<h3 id="cause-javalangillegalargumentexception-mapped-statements-collection-does-not-contain-value-for-comopenmenuf_3selectreplylist-1">Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.open.MenuF_3.selectReplyList</h3>
<pre><code>at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.3.1.jar:3.3.1]</code></pre><blockquote>
<h3 id="-원인">* 원인</h3>
<pre><code>: 위와 같은 에러가 발생할 경우 아래와 같이 여러 원인이 존재할 수 있다고 한다. 
 (1) mapper id가 틀린 경우
 (2) Parameter와 bean의 field명이  틀린 경우
 (3) sql.xml에서 정의된 namespace와 DAO에서 호출하는 namespace가 다를 경우
 (4) mapper가 정의가 되어 있지 않거나 Spelling이 틀린 경우
 (5) mapper에 정의된 namespace 명칭이 같은 Application 내에 중복 될 경우</code></pre></blockquote>
<h3 id="해결">해결:</h3>
<p>mapper에 쿼리 id를 변경했는데 controller에 있는 이름을 수정하지 않아서였다. 수정 후 해결</p>
<p><a href="https://luceatluxvestra.tistory.com/17">참조사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-e7obxmq2</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-e7obxmq2</guid>
            <pubDate>Sat, 03 Apr 2021 06:54:22 GMT</pubDate>
            <description><![CDATA[<h3 id="오류-내용-">오류 내용 :</h3>
<p>아직 만들어지지 않은 준비 페이지를 <code>&quot;준비중&quot;페이지</code>로 보내고 경고창도 띄우기 위해 controller를 만들고 그 안에 매핑하는 메서드까지 만들었는데 계속 404에러가 콘솔에 떴다.</p>
<blockquote>
<h3 id="해결-">해결 :</h3>
<p>@PathVariable 파라미터를 사용하면 url의 일부분을 변수로 전달하는데,</p>
</blockquote>
<pre><code>@RequestMapping( folderPath2 + &quot;{procType}/list.do&quot;)
    public String prepare2(@ModelAttribute(&quot;searchVO&quot;) CmmnDefaultVO searchVO, Model model, @PathVariable String procType) {
    }</code></pre><p>procType 안에 <code>/</code>가 들어가있으면 매핑이 되지 않았다.</p>
<p>1) <code>String procType = &quot;au/auList&quot;;</code> X
2) <code>String procType = &quot;auList&quot;;</code> O</p>
<p><a href="https://marobiana.tistory.com/138">PathVariable 여러개 사용</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-lnhwhsd5</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-lnhwhsd5</guid>
            <pubDate>Fri, 02 Apr 2021 07:44:56 GMT</pubDate>
            <description><![CDATA[<h3 id="error-updating-database--cause-commysqljdbcmysqldatatruncation-data-truncation-incorrect-integer-value--for-column-ispt_board2re_seq-at-row-1">Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect integer value: &#39;,&#39; for column <code>isp</code>.<code>t_board2</code>.<code>RE_SEQ</code> at row 1</h3>
<h3 id="the-error-may-involve-comopenboard2insertreviewcontents-inline">The error may involve com.open.Board2.insertReviewContents-Inline</h3>
<h3 id="the-error-occurred-while-setting-parameters">The error occurred while setting parameters</h3>
<h3 id="sql--boardvoinsertcontents-----insert-into-t_board2------------------seq------------------re_seq------cont------rgst_id---------values-------select-ifnullmaxtsseq11-from-t_board2-ts-------------------">SQL: /* boardVO.insertContents */    INSERT INTO t_board2(                  SEQ                 , RE_SEQ     , CONT     , RGST_ID     )    VALUES (      (SELECT IFNULL(MAX(TS.SEQ)+1,1) FROM t_board2 TS)     ,?     ,?     ,?    )</h3>
<h3 id="cause-commysqljdbcmysqldatatruncation-data-truncation-incorrect-integer-value--for-column-ispt_board2re_seq-at-row-1">Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect integer value: &#39;,&#39; for column <code>isp</code>.<code>t_board2</code>.<code>RE_SEQ</code> at row 1</h3>
<p>; SQL []; Data truncation: Incorrect integer value: &#39;,&#39; for column <code>isp</code>.<code>t_board2</code>.<code>RE_SEQ</code> at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect integer value: &#39;,&#39; for column <code>isp</code>.<code>t_board2</code>.<code>RE_SEQ</code> at row 1
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect integer value: &#39;,&#39; for column <code>isp</code>.<code>t_board2</code>.<code>RE_SEQ</code> at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971) ~[mysql-connector-java-5.1.45.jar:5.1.45]</p>
<pre><code>해결: 쿼리 id 겹침</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-na6rvc6h</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-na6rvc6h</guid>
            <pubDate>Thu, 01 Apr 2021 07:55:37 GMT</pubDate>
            <description><![CDATA[<p>4월 01, 2021 4:49:49 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: 경로 []의 컨텍스트 내의 서블릿 [action]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is java.lang.IndexOutOfBoundsException: Index: 1, Size: 1]을(를) 발생시켰습니다.
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at com.open.ft.BoardFourController.view(BoardFourController.java:174)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:747)
......................중략</p>
<pre><code>        //게시판 이미지 목록
        List&lt;FileVO&gt; fileVO =  (List&lt;FileVO&gt;) cmmnService.selectList(boardVO.getAtchFileId(), &quot;FileManageDAO&quot; +&quot;.selectFileList&quot;);
        model.addAttribute(&quot;fileVO&quot; , fileVO);
        model.addAttribute(&quot;atchFileId&quot;, boardVO.getAtchFileId());
        model.addAttribute(&quot;atchFileIdNm&quot;, boardVO.getAtchFileIdNm());


        System.out.println(&quot;fileVO//////////////getAtchFileId//////////:  &quot;+ fileVO.get(1).getAtchFileId());
        System.out.println(&quot;fileVO//////////////getFileSn//////////:  &quot;+ fileVO.get(1).getFileSn());</code></pre><blockquote>
<h3 id="해결">해결</h3>
<p>테스트용으로 달아둔 식별자가 문제였다.  list자료형 변수에서 없는 값을 get(index)해서 생긴 문제로 아래 달아둔 syso를 없애면 문제가 해결된다.</p>
</blockquote>
<p><a href="https://tyson.tistory.com/157">참고사이트</a></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-rfotoel2</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98-rfotoel2</guid>
            <pubDate>Tue, 30 Mar 2021 05:06:40 GMT</pubDate>
            <description><![CDATA[<h3 id="오류내용-">오류내용 :</h3>
<blockquote>
<p>org.apache.jasper.jasperexception: 등호(&quot;=&quot;)가 요구됩니다.</p>
</blockquote>
<h3 id="해결-">해결 :</h3>
<pre><code>&lt;form:input path=&quot;staDate&quot; id=&quot;staDate&quot; readonly/&gt;</code></pre><p>readonly에 등호 추가 변경</p>
<pre><code>&lt;form:input path=&quot;staDate&quot; id=&quot;staDate&quot; readonly=&quot;readonly&quot;/&gt;</code></pre><hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[오류]]></title>
            <link>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@songi_jeon/%EC%98%A4%EB%A5%98</guid>
            <pubDate>Mon, 29 Mar 2021 01:55:06 GMT</pubDate>
            <description><![CDATA[<h3 id="오류내용">오류내용:</h3>
<blockquote>
<p>org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0&#39;: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map &#39;loginController&#39; bean method 
public java.lang.String com.open.ma.login.LoginController.fail(com.open.cmmn.model.CmmnDefaultVO,org.springframework.ui.ModelMap) throws java.lang.Exception
to {[/cmmn/fail.do],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already &#39;loginFtController&#39; bean method
public java.lang.String com.open.cmmn.ft.login.LoginFtController.fail(com.open.cmmn.model.CmmnDefaultVO,org.springframework.ui.ModelMap) throws java.lang.Exception mapped.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554) ~[spring-beans-4.0.9.RELEASE.jar:4.0.9.RELEASE].....</p>
</blockquote>
<p>해결: controller에 requestmapping 이름이 겹쳐서, 중복 제거하기</p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021-03-23 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/2021-03-23-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/2021-03-23-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Tue, 23 Mar 2021 11:29:17 GMT</pubDate>
            <description><![CDATA[<h2 id="jstl">JSTL</h2>
<pre><code class="language-JSTL">&lt;c:set var=&quot;url&quot; value=&quot;${requestScope[&#39;javax.servlet.forward.request_uri&#39;]}&quot;/&gt;</code></pre>
<p> requestScope :  request 객체에 접근하기 위한 역할
 여기서는 현재 URL 정보 출력하는 함수
 예) <code>Javax.servlet.forward.request_uri = /mani-examples/jsp/Forwarder.jsp</code>
 Tiles 정보를 출력하는 것도 있음</p>
<p> 참조 사이트
 <a href="https://creamilk88.tistory.com/117">JSTL</a>
 <a href="https://atoz-develop.tistory.com/entry/JSP-JSTL-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%A3%BC%EC%9A%94-%ED%83%9C%EA%B7%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC">jstl2</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021/03/22 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/20210322-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/20210322-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Mon, 22 Mar 2021 07:30:04 GMT</pubDate>
            <description><![CDATA[<h2 id="오류">오류</h2>
<h3 id="상황">상황</h3>
<blockquote>
<p>2021-03-22 13:26:06,213  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.
2021-03-22 13:26:06,229  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.
2021-03-22 13:26:06,234  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.
2021-03-22 13:26:06,239  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.
2021-03-22 13:26:06,244  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.
2021-03-22 13:26:06,248  INFO [com.open.cmmn.web.CmmnErrorController] (error404) 페이지가 존재하지 않습니다.........중략</p>
</blockquote>
<h3 id="원인">원인</h3>
<p>onerror속성에 있는 경로에 no_img.png 파일이 존재하지 않았다.
더불어 개발자 모드로 보았다면 console.log에 이미지 못찾는다는 경고가 수도 없이 찍힐 것이다.</p>
<pre><code class="language-html">&lt;img src=&quot;/atch/getImage.do?atchFileId=${result.atchFileId}&amp;amp;fileSn=${result.fileSn}&quot; alt=&quot;&quot; onerror=&quot;this.src=&#39;/publish/ft/images/sub/no_img.png&#39;&quot;&gt;</code></pre>
<h3 id="해결">해결</h3>
<p><code>/publish/ft/images/sub/no_img.png</code> 경로에 이미지 파일을 넣어주고 정상 작동</p>
<hr>
<h2 id="sql">SQL</h2>
<h3 id="--min">- MIN</h3>
<pre><code class="language-SQL">            SELECT  
                  SEQ seq
                , TITLE title
                , CONT cont
                , DATE_FORMAT(RGST_DT,&#39;%Y.%m.%d&#39;) rgstDt
                , RGST_ID rgstId
                , F_USER_NM(RGST_ID) name
                , ATCH_FILE_ID atchFileId
                , (
                    SELECT MIN(file_sn)
                    FROM T_ATCH_FILE_DETAIL b
                    WHERE ATCH_FILE_ID = TS.ATCH_FILE_ID
                      AND b.DEL_YN=&#39;N&#39;    
                    ORDER BY SEQ
                ) AS fileSn
             FROM T_IMG_BOARD TS
             WHERE USE_YN=&#39;Y&#39;;    </code></pre>
<p>게시글 리스트에서 서브쿼리를 이용해 게시글이 첨부한 이미지 파일의 첫번째 시퀀스를 가져오는 쿼리이다.</p>
<p>이때, 위처럼 SELECT절에 <code>MIN(컬럼)</code>을 이용해 하는 방법,</p>
<p>서브 쿼리에서 단일 행만을 추출 하려면 제일 아래 라인에 <code>LIMIT 1</code>을 사용하는 방법</p>
<h3 id="--limit">- LIMIT</h3>
<pre><code class="language-SQL">            SELECT file_sn
            FROM T_ATCH_FILE_DETAIL b
            WHERE ATCH_FILE_ID = TS.ATCH_FILE_ID
                  AND b.DEL_YN=&#39;N&#39;    
            ORDER BY SEQ
            LIMIT 1;</code></pre>
<h3 id="성능">성능</h3>
<p>하나의 값일 때 MIN을 사용하면 성능이 좋지만, 얼마 차이가 나지 않는다고
여러 컬럼을 나타내야 한다면 ORDERBY LIMIT 을 사용하는 게 좋다.</p>
<p><a href="https://kauboy.tistory.com/18">SQL참고사이트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2021- 03-19 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/2021-03-19-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/2021-03-19-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Fri, 19 Mar 2021 01:42:47 GMT</pubDate>
            <description><![CDATA[<h3 id="jstl">jstl</h3>
<p><a href="https://lee1535.tistory.com/29">jstl</a></p>
<h3 id="mysql-조건문---if문-case문">Mysql 조건문 - if문, case문</h3>
<p><a href="https://redcow77.tistory.com/260">mysql참조</a></p>
<h2 id="오류-1">오류 1</h2>
<p>*<em>상황 : *</em> list 자료형이 아닌것을 foreach 반복문을 돌릴 수 없다는 에러가 났었다. 
jsp파일에 foreach가 없는데 왜 에러가 나는지 알 수 없었던 상황</p>
<p>*<em>원인 : *</em> 알고보니 c:if 안에 또 c:if가 선언되어 있었다.
*<em>해결 : *</em> 안에 들어있는 c:if를 제거 했다.</p>
<blockquote>
<pre><code>&lt;c:if test=&quot;something&quot;&gt;
    &lt;c:if test=&quot;something&quot;&gt;
    &lt;/c:if&gt;
&lt;/c:if&gt;</code></pre></blockquote>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[2021-03-15 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/2021-03-15-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/2021-03-15-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Mon, 15 Mar 2021 14:32:12 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘-배운-것">오늘 배운 것</h2>
<h4 id="상황">상황</h4>
<p>동적으로 생성한 버튼에 클릭 이벤트 주고 싶었는데 적용이 되지 않았다. 전날 selectbox나 checkbox도 같은 맥락이 아니엇나 싶다. </p>
<h3 id="click">.click()</h3>
<p>단순히 정적인 페이지에서 이벤트 처리하기에 적합하다. 왜냐하면 동적 처리는 불가능 하기 때문에!</p>
<blockquote>
<p>$(&quot;#btn&quot;).click(function(){
    alert(&#39;동적 생성은 클릭안됨&#39;);
});</p>
</blockquote>
<h3 id="on">.on()</h3>
<p>주최가 되는 부모속성의 이벤트를 물려받아 지정한 선택자에 이벤트를 연결 할 수 있다.
그러나 부모속성에 따라 정적으로 작동될 수 있으므로 이 부분에 유의하자.</p>
<blockquote>
<p>$(document).on(&quot;click&quot;, &quot;#btn&quot;, function(){
    alert(&#39;동적도 클릭됨&#39;);
});</p>
</blockquote>
<p><a href="https://myhappyman.tistory.com/91?category=866066">참조사이트1</a></p>
<p><a href="http://webpaper.kr/show/89">참조사이트2</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[javascript 코드 색상 적용하기]]></title>
            <link>https://velog.io/@songi_jeon/javascript-%EC%BD%94%EB%93%9C-%EC%83%89%EC%83%81-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@songi_jeon/javascript-%EC%BD%94%EB%93%9C-%EC%83%89%EC%83%81-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 11 Mar 2021 03:49:52 GMT</pubDate>
            <description><![CDATA[<h4 id="적용된-결과-화면-표시">적용된 결과 화면 표시</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/baddb5cf-68ab-42c2-ba41-4dccefaad732/01.jpg" alt=""></p>
<h4 id="1-window--preferences-클릭">1. window &gt; preferences 클릭</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/6c0f34ac-708f-4cc3-a31f-fcd57a30c58e/K-001.png" alt=""></p>
<h4 id="2-사이드-바에서-editors--file-associations-클릭">2. 사이드 바에서 editors &gt; file associations 클릭</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/3b8f4c5d-e3fe-4bc8-ba31-8664c8eb5325/K-002.png" alt=""></p>
<h4 id="3-file-types에-js가-없는-경우-add버튼을-클릭">3. file types에 .js가 없는 경우 add버튼을 클릭</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/a6e0c834-24f6-4902-b207-39cde16d49e9/K-003.png" alt=""></p>
<h4 id="4-입력창에-js를-작성-후-ok">4. 입력창에 .js를 작성 후 ok</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/5ca3318e-2f0f-4ea2-a4d8-5cad44a32029/K-004.png" alt=""></p>
<h4 id="5-추가한-js를-클릭">5. 추가한 .js를 클릭</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/33960872-60d5-4f61-a683-bc0cf1267c91/K-005.png" alt=""></p>
<h4 id="6-associated-editors에서-generic-text-editor-클릭-후-default키-클릭">6. Associated editors에서 generic text editor 클릭 후 default키 클릭</h4>
<p><img src="https://images.velog.io/images/songi_jeon/post/1b3b7f8e-080b-470c-afc5-3f3113909aea/K-006.png" alt=""></p>
<h4 id="7-apply-and-close-후-js파일-열어보면-컬러가-적용된-것을-확인-할-수-있음">7. apply and close 후 js파일 열어보면 컬러가 적용된 것을 확인 할 수 있음</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[21-03-11 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/21-02-11-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/21-02-11-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Thu, 11 Mar 2021 02:19:31 GMT</pubDate>
            <description><![CDATA[<h2 id="💭-오늘의-질문">💭 오늘의 질문</h2>
<h3 id="model이-아닌-modelmap을-사용하는-이유가-궁금합니다">Model이 아닌 ModelMap을 사용하는 이유가 궁금합니다.</h3>
<pre><code>    @RequestMapping(value = folderPath + &quot;menuCodeOverlap.do&quot;)
    public ModelAndView menuCodeOverlap(@ModelAttribute(&quot;searchVO&quot;) MnVO searchVO, ModelMap model, HttpServletRequest request) throws Exception {


        int overCnt = cmmnService.selectCount(searchVO, PROGRAM_ID + &quot;.overlapSelectCount&quot;) ;

        model.addAttribute(&quot;overCnt&quot;, overCnt);

        return new ModelAndView(ajaxView,model);

    }</code></pre><p>model에 있는 객체 값을 json으로 바꿔서 Ajax로 보내줄 때 
ajaxView를 사용하면서 필수로 사용.
(만약  model로 하면 오류가 뜸.)</p>
<p>평소에는 어떤 것을 쓰든 상관은 없음</p>
<h3 id="jquery-선택자-중에서-gnb--li--a-이러한-형태일-때--괄호의-의미가-궁금합니다">jQuery 선택자 중에서 $(&quot;.gnb &gt; li &gt; a&quot;) 이러한 형태일 때 &gt; 괄호의 의미가 궁금합니다.</h3>
<p>D. 자식 / 자손선택자</p>
<p>-&gt; $(&quot;#list1 li&quot;).css(&quot;color&quot;,&quot;green&quot;);</p>
<ul>
<li>list1이라는 id를 가진 태그안에 있는 li태그들을 모두 선택, 적용 depth 1이상. -&gt; 바로 아래 자식태그만 건드리는것이 아닌 list1의 모오든 자식들..</li>
</ul>
<p>-&gt; $(&quot;#list1 &gt; li&quot;).css(&quot;color&quot;,&quot;green&quot;);</p>
<ul>
<li>list1이라는 id를 가진 태그안에 있는 바로 1depth 아래있는 자식들 중 li태그만 선택됨. 
<a href="https://sas-study.tistory.com/174">참조 사이트</a></li>
</ul>
<h3 id="지금-가장-중점을-둘-부분은">지금 가장 중점을 둘 부분은?</h3>
<p>CRUD가 기본이기 때문에 가장 먼저 파악할것, 
나중에 테스트로 댓글 게시판이 나올 수도 있기때문에 이걸 어떻게 만들지 기존 SAMPLE소스를 이용해서 어떻게 구현할 수 있는지 응용할 방법 알아보기</p>
<hr>
<h2 id="😎-crud정리">😎 CRUD정리</h2>
<p>---- READ ----</p>
<h3 id="list게시판-메인">LIST(게시판 메인)</h3>
<p>list.do 페이지 접속</p>
<ol>
<li><p>SampleController list 메서드
.mLayout:tiles로 지정해둔 레이아웃 사용
folderPath + list.jsp 연결 파일 경로로 이동</p>
</li>
<li><p>list.jsp
2-1. searchVO 표시
페이지 접속되면 $(document).ready(function(){
 fncPageBoard(&#39;addList&#39;,&#39;addList.do&#39;,1);
}); 
실행되고 fncPageBoard 호출 </p>
</li>
<li><p>/publish/ma/js/board.js
3-1. fncPageBoard 메서드 실행
3-2. 파라미터 값 (&#39;addList&#39;,&#39;addList.do&#39;,&#39;1&#39;)를 getBoard의 배열로 넣기
3-3. switch문에서 gubun = addList, url = addList.do, idx = 1 가지고
3-4. switch (gubun)의 case &#39;addList&#39;이동
3-5. list.jsp의 <code>&lt;input type=&quot;hidden&quot; id=&quot;pageIndex&quot; name=&quot;pageIndex&quot;/&gt;</code>에 idx값 넣기
3-6. Ajax 목록호출 후 list의 .tbl클래스 목록에 html안의 내용 변경
$.ajax({<br> method: &quot;POST&quot;,<br> url: url,<br> data : $(&quot;#defaultFrm&quot;).serialize(), 
 dataType: &quot;html&quot;, 
 success: function(data) {</p>
<pre><code> $(&quot;.tbl&quot;).html(data);
 fncLodingEnd(); </code></pre><p> }
});</p>
</li>
<li><p>sampleController addList.do로 진입
4-1. Cache에 담긴 페이징 정보 취득및 없을 시 생성
4-2. <code>int totCnt = cmmnService.selectCount(searchVO, PROGRAM_ID);        // 쿼리에서 전체 게시물 건수를 가져와서 페이징 처리</code>
4-3. model에 paginationInf이란 name으로 화면에 전달
4-4. <code>return  folderPath + &quot;addList&quot;;</code></p>
</li>
</ol>
<h3 id="view게시판-상세">view(게시판 상세)</h3>
<ol>
<li><p>addList.jsp에서 게시글 클릭
<code>&lt;td onclick=&quot;fncPageBoard(&#39;view&#39;,&#39;view.do&#39;,&#39;${result.seq}&#39;,&#39;seq&#39;)&quot;&gt;${result.name }&lt;/td&gt;</code>
onclick: <strong>버튼을 사용</strong>했을 때 <strong>페이지 링크를 연결</strong> 시켜야 할때 사용
board.js의 fncPageBoard 호출하고 실행</p>
</li>
<li><p>fncPageBoard(&#39;view&#39;,&#39;view.do&#39;,&#39;130&#39;,&#39;seq&#39;) 파라미터를 가지고 
fncPageBoard 메서드 진입해서<br>gubun = view,
url = view.do,
seqVal = 130,
seqNm = seq</p>
</li>
<li><p>switch (gubun) 진입</p>
</li>
<li><p>case &#39;view&#39; 실행</p>
</li>
</ol>
<p>........향 후 계속 추가</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[21-03-10 오늘 공부]]></title>
            <link>https://velog.io/@songi_jeon/21-03-10-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</link>
            <guid>https://velog.io/@songi_jeon/21-03-10-%EC%98%A4%EB%8A%98-%EA%B3%B5%EB%B6%80</guid>
            <pubDate>Wed, 10 Mar 2021 02:21:46 GMT</pubDate>
            <description><![CDATA[<h3 id="modelattribute가-메소드의-파라미터로-사용할-경우-프로그램이-어떻게-돌아가는가">@ModelAttribute가 메소드의 파라미터로 사용할 경우 프로그램이 어떻게 돌아가는가</h3>
<p><a href="https://donggu1105.tistory.com/14">참조 사이트</a></p>
<ul>
<li>modelAttribute속성으로 지정된 이름의 객체를 <strong>세션</strong>에서 읽어와서 form태그로 설정된 태그에 값을 설정합니다.</li>
<li>Spring MVC가 제공하는 tag 라이브러리를 이용하면 세션에 있는 정보들을 form에다가 출력을 할 수도 있습니다.</li>
</ul>
<p>view.jsp</p>
<pre><code>    &lt;form:form commandName=&quot;searchVO&quot; name=&quot;defaultFrm&quot; id=&quot;defaultFrm&quot; method=&quot;post&quot;&gt;

        &lt;form:hidden path=&quot;seq&quot; id=&quot;seq&quot;/&gt;
        &lt;form:hidden path=&quot;atchFileId&quot; id=&quot;atchFileId&quot;/&gt;

    &lt;/form:form&gt;</code></pre><p>sampleController.java</p>
<pre><code>    @SuppressWarnings(&quot;unchecked&quot;)
    @RequestMapping(folderPath + &quot;view.do&quot;)
public String view(@ModelAttribute(&quot;searchVO&quot;) SampleVO2 searchVO, Model model, HttpServletRequest request) throws Exception {

    return &quot;.mLayout:&quot; + folderPath + &quot;view&quot;;

 }</code></pre><p>form태그에 action이 없지만 대신 ModelAttribute의 &quot;searchVO&quot;에 post로 searchVO로 hidden값을 가지고 전송</p>
<h3 id="sessionstatus-사용법">SessionStatus 사용법</h3>
<p><a href="https://nbkw.tistory.com/153">참조사이트</a>
SessionStatus 는 컨트롤러 메소드의 파라미터로 사용할 수 있는 스프링 내장 타입으로, 
이 오브젝트를 이용하면 현재 컨트롤러의 @SessionAttributes에 의해 저장된 오브젝트를(전달받은 값) 삭제하고자 할 때는 sessionStatus가 가지고 있는 setComplete()이라는 메서드를 호출하면 세션에서 삭제할 수 있습니다.</p>
<h3 id="새로-알게된-용어">새로 알게된 용어</h3>
<p>{템플릿 변수}
@RequestMapping 어노테이션 값으로 {템플릿변수} 를 사용합니다.</p>
<p>@PathVariable 어노테이션을 이용해서 {템플릿 변수} 와 동일한 이름을 갖는 파라미터를 추가하면 됩니다.</p>
<hr>
<h2 id="jquery">jQuery</h2>
<h3 id="mouseenter-focusin">mouseenter focusin</h3>
<p><a href="https://www.nextree.co.kr/p10008/">참조사이트</a>
마우스 요소의 경계 외부에서 내부로 이동할 때 발생</p>
<h3 id="형제sibling-요소의-선택">형제(sibling) 요소의 선택</h3>
<p>.siblings()    메서드
선택한 요소의 형제(sibling) 요소 중에서 지정한 선택자에 해당하는 요소를 모두 선택한다.
<a href="http://www.devkuma.com/books/pages/221">참조사이트</a></p>
<h3 id="특정-선택자를-제외">특정 선택자를 제외</h3>
<blockquote>
<p>.not(selector)</p>
</blockquote>
<p>선택한 요소 중 특정 선택자를 제외한 요소를 선택합니다.
<a href="https://www.codingfactory.net/10333">참조사이트</a></p>
<h3 id="form-id-또는-nameserialize">$(&quot;form id 또는 name&quot;).serialize()</h3>
<p>jQuery에서 Ajax로 호출하기 전에 serialize를 해주면 form 안에 값들을 한 번에 전송이 가능한 data로 만들 수 있다.(즉, 많은 data를 전송할 때 유용)</p>
<p>serialize 사용할 경우</p>
<pre><code class="language-jQuery">&lt;script&gt;

$.ajax({
  type: &quot;&quot;,
  url  : 서버url,
  type : &quot;POST&quot;,
  data : $(&quot;#food&quot;).serialize(),
  dataType: &quot;json&quot;
  success : function(){
    alert(&quot;사용하면 짧다&quot;);
  }
});

&lt;/script&gt;</code></pre>
<p>serialize 사용하지 않을 경우</p>
<pre><code class="language-jQuery">
&lt;script&gt;

$.ajax({
  type : &quot;POST&quot;,
  url  : 서버url,
  data : {
    ramyun: &#39;good&#39;,
    pizza: &#39;nice&#39;,
    kimchi: &#39;good&#39;,
    dogfood: &#39;nope&#39;
  },
  dataType: &quot;json&quot;
  success : function(){
    alert(&quot;사용하지 않으면 힘들다&quot;);
  }
});

&lt;/script&gt;</code></pre>
<p><a href="https://lookingfor.tistory.com/entry/JQuery-serialize">참조사이트</a></p>
<hr>
<h2 id="sql">SQL</h2>
<p>페이징 공부를 위한 더미 데이터 생성을 위해 찾게 됨.
oracle과 LOOP문을 대신 MySQL은 프로시저를 생성해서 작동된다. 
<a href="https://gbsb.tistory.com/93">참고사이트</a>
mysql 더미 데이터 생성, 같은 이름의 프로시저가 있으면 삭제 후 생성</p>
<pre><code>
DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$

CREATE PROCEDURE loopInsert()
BEGIN

    DECLARE i INT DEFAULT 5;

    WHILE i &lt;= 20 DO

        INSERT INTO t_sample2 (SEQ, TITLE, CONT, RGST_ID )

          VALUES (i, concat(&#39;제목입니다&#39;,i), concat(&#39;내용입니다.&#39;,i),5);

        SET i = i + 1;

    END WHILE;
END$$
DELIMITER $$
</code></pre><p>사용은</p>
<pre><code>CALL loopInsert;</code></pre><hr>
<h3 id="웹view-컴파일-순서">[웹]View 컴파일 순서</h3>
<p>웹페이지 리딩 순서:
Java -&gt; Jstl -&gt; Html -&gt; Javascript</p>
<hr>
<h2 id="jstl">JSTL</h2>
<h3 id="cout태그의-속성">&lt;c:out&gt;태그의 속성</h3>
<p>excapeXml 속성 :   속성 값으로 true또는 false 값을 가진다. 생략시 기본값은 true이다. 
true로 설정시 escapeXml속성은 값 중에 포함된 &lt; &gt; &amp; &#39; &quot; 문자들을 각각 &lt; &gt; &amp; &#039; &#034; 로 출력한다.</p>
<hr>
]]></description>
        </item>
    </channel>
</rss>