読者です 読者をやめる 読者になる 読者になる

Java
    JSP化
    画面の項目の配置が期待通りにならない時
        画面の一部レイアウトがずれている場合の対処法
        例)ボタン
        モックと開発中画面をIEの開発者ツールで確認し、
        該当部分を右クリック⇒HTML要素として編集
        で該当部分をそれぞれ見比べて確認

    Eclipse  使い方
        ショートカットキー
            縦コピー(矩形選択)
                SHIFT+ALT+A

            一杯表示しすぎて隠れているソースコードを表示
                CTRL+E
                または、CTRL+SHIFT+E

            ファイル検索
                CTRL+H

            型名検索
                CTRL+SHIFT+R

            ブレークポイント設定
                CTRL+SHIFT+B

            ブックマークを設定するショートカットキーがない場合
            ⇒行番号のあたりで右クリック⇒ブックマークの追加(切り替え)


            インデント整形(HTML,JSPに使うと全角スペースが消えてしまうため、使用する前に要確認)
                CTRL+SHIFT+F
                ⇒CTRL+ALT+↓でタグの範囲を指定してレイアウトを調整する方がたぶん間違いない

            選択した単語をファイル内で検索
                単語を選択した状態でCtrl+K

        Eclipse 事前設定
            ウィンドゥ⇒設定⇒色とフォント⇒テキストフォント
            メイリオ 10以上

        Eclipse Winmergeは相性が悪いから使わない方がいいい

        Eclipse ビルド時のエラー確認
            ウィンドウ⇒ビューの表示⇒その他⇒問題

        Eclipse 起動時にワークスペースをクリーン(起動時の引数追加)
            "C:\eclipse\eclipse.exe -clean.cmd"

        リソ-スを開く(Ctrl+SHIFT+R)でclassファイルが表示されないようにする
            リソースを開くで開いた画面の右上の▼をクリック、派生リソースのチェックOFF

        jquery注意点
            idにぴりおどやコロン(:)を用いる時は、バックスラッシュ(\\)でエスケープする必要あり

        JSP コントロールの制御
            jsp上は、hidden="true"などと値を直接格納せず、
            hidden="${hogehogeForm.hiddenFlg == 'true'}"のように、Beanから取得した値で判断させる

    コンソールログを確認する方法
        IEで開き、開発者ツールのコンソールで確認
        Eclipseのコンソールには出ないので注意

    CSS設計
        term-area-padding
        ⇒やめたい、意味がない
         これをすると文字を赤くするにもクラスが必要
        このテーブルの設定、みたいな名前にする
        パーセント指定、px指定はすべて排除(emとか使う)

    Javascript ボタンクリックでボタンの色を変更1
        hoge = function() {
            var cnt = 0;
            $(':checked').each(function() {
                if($(this).val() === hogeConst.YES) {
                    cnt += 1;
                }
            });
            return cnt;
        };

        fuga = fuction(e) {
            if(hoge() > 0) {
                $('btn-submit').removeClass('disabled');
            } else {
                $('btn-submit').addClass('disabled');
            }
        };

        $(document).ready(function() {
            // DOM読み込み後処理
            JQuery("input:checkbox").click(fuga);
        });

    Java ==とequals()
        equals()を使用する事
        == は参照が一致していれば、Trueになってしまう


    DOM読み込み後に処理したい場合
        $(document).ready(function() {
        });

    HTML CSS JAVASCRIPT
    モックJSPで画面サイズが違う場合の観点
        ・form内部の値を開発者ツールでコピーしてみて一緒になる⇒自分のコードに問題あり
        ・フッターの二重定義
        ・formのcssClass指定
        ・css不足
        ・javascript不足

    DAOとEntityの違い
        データベースに、アクセスするのがDAO
        データベースにある、例えば「生徒」テーブルの一行がエンティティ。
        エンティティは、インスタンスがされた「実体」のことを指しています。

        名前、学年、性別というカラムがある生徒テーブル一行がエンティティ
        その一行を取り出したり、カラムを設定したりいろいろデータをごにょごにょするのがDAO

    HTML JAVA JSP実装注意点
        基本キャメルケース?
        
        nameとFormクラスの変数名が一致していないと
        ボタン押下時に値が取れないらしい

        ボタン名を一意の名前にする
        ⇒ボタン毎に内部で動作が指定される可能性がある為

    反省点
        2016/4/28
        事前調査不足の為、手戻り発生_カスタムタグ挿入
            事前調査方法:既存のID、nameの付け方の方法を全検索⇒パターンから命名規約を確定
            ⇒キャメルケース化、パスカルかを事前に聞くべきだった。
            事前に自分たちで決められないことがないか確認

    Java カスタムタグ 一つだけ改行をさせる方法
        <c:set var"newLine" value="${newLine}</br>"/>
        上記のようにしないとbrタグが二つ生成されてしまう

    勉強の為に残しておきたいSVNのコミットを保存しておくこと
        プロジェクトを選択し、チーム⇒ヒストリーから、修正前後の番号を選択して
        エクスポートすればいい?
        ⇒毎日やっておかないとブランチを捨てられて見れなくなる。バッチ化?
        svn
        http://d.hatena.ne.jp/replication/20111125/1322147980
        vss
        http://aoki1210.hatenablog.jp/entry/20080304/p1

    全体
        ミスを少なくする方法
            修正前の既存のソース、データは消さない。
            消すのはコミット直前。

        全ての作業にエビデンスを
            エクセルで、どのバージョンのソース、資料で何を検索した結果、
            何を修正することになったか、
            そして修正したことのエビデンスを付ける。

            2016/6/7
            製造もれ
                正)アコーディオンはダイアログオープン時に初期化するが、
                一部のその他入力などのデフォルトで値が入ってくるものは初めからオープン状態にする

                漏れた原因:作業一つ一つに対するエビデンスを作らなかった。


        マトリクス(各状態におけるボタン制御等)についての具体的な実装方法
            ⇒ボタン単位で処理を実装する
            例)Aボタンー条件A、条件Bの場合活性。。。。
            その際、すべての条件を記載数必要があるか確認する
            例)Bボタンが活性になるにはAボタンが完了していてB処理が終わっていない場合

        html,javascriptの基本
            htmlは基本ダブルコーテーション
            javascript,jqueryは基本シングルコーテーション

    JavaScript $target.data(セレクタ)の意味
        カスタムデータ属性の要素を取得する。
        例)$target.data('btn-collapse')
        ⇒HTML上でdata-btn-collapse="aaaBtn"と指定されている場合、「aaaBtn」を取得
        ⇒data-btn-collapseを設定している要素を順次取得し、aaaBtn要素内に何か変更を加えたい場合に使用

    Jquery 改行コード 置換
        .replace(/\n/g, '')
        /\n/..改行コードの場合(?)は\で始めないと文字列として判断されてしまう模様
        /g...モード修飾子。該当するすべてを置換するためにこれを使う模様

    ダイアログからのValidate処理法
        1.親画面の編集ボタン押下
        2.ダイアログ呼び出し(jsが呼び出し処理中に、押下されたボタンについてるカスタムデータ属性を保持)
        3.ダイアログからsubmit(自分自身を呼ぶ)("/validate.do")
        4.Controllerへ。@RequestMapping(value = "/validate.do", method = RequestMethod.POST)
        5.2で割り当てた値を取り出して親画面に反映??????

    Excel、VBAの基本
        メソッド定義
            Sub aaa()
            end sub

        関数定義
            Function aaa as String
                aaa = "aaa"
            end function

        変数定義
            var aaa as String
        
        関数を使用
            Worksheetfuncion.count(A1:A5)

        注意点
            if elseif ... else ... endif
            ⇒Thenのタイミングで開業してあげないとエラーになって動かない

            定義又はプロパティが定義されていません
                ⇒必要な奴を削除しちゃった?

        シート内ハイパーリンク
            =YPERLINK("#Sheet1!A1", "aa")

        画像ごと行を削除できるようにする方法
            http://blog.livedoor.jp/qoozy/archives/52568172.html

        吹き出しのみ削除
            http://www4.synapse.ne.jp/yone/excel2010/excel2010_zu_obje_del.html

    bean作成時の注意点
        画面で更新するものだけをBeanとして定義する
        ⇒何が更新されるべきものなのか、事前に明確にすべき

        では、ボタンの活性非活性、チェック状態制御等はSettingFormとしてModelAttributeするbeanとは分割

    スクリプトレット
        <%= %>

    JSP上で部分的にセッション条件を変えたい OR 条件を変えるのが面倒な処理を一発で変える方法
        正にしたい場合は後ろに || true
        負にしたい場合は後ろに && false
        <c:if test="${hogehoge == fugafuga || true}">

    製造時に漏れがないように実装する方法
        ソースファイル内に設計書の内容をすべてコピーしてから実装
        ⇒余計なウィンドウ遷移をなくす

    Excel テキストボックスの取り消し線を追加する
        ホームーフォントの拡張ボタン押下

    JSP BeanとJSPマッピング
        一つずつ値のセット処理を入れないと、
        値が入っているかどうかわからない
        (メンバ名が一致しているものを自動的にコピーする方法だとわからない。エラーが出てても気づかない)
        ⇒BeanUtil.copyPropertiesを使うべきか問題。

    改善点
        作業手順
            ・ヒアリングした内容をまとめる(まとめる中で気になったことは先に聞く)。作業の全量を把握する
                ABCがあるときに、Aはパターン1で出来るけど、Bはパターン2でしかできない、という場合が
                ないかどうかの把握

            例)メソッド化で渡す引数について、
                disabledの場合はidを設定すればid名の文字列私でも可能(オブジェクト参照でも可能)
                hiddenの場合はidを指定していない「tr」タグなどがたくさんある為、オブジェクト参照でしかできない
                ⇒disabledの場合もhiddenの場合もオブジェクト参照でないとできない

    javascriptで定数定義して呼び出す方法
        http://d.hatena.ne.jp/MoonMtLab/20130831/1377919614

    javascript 基底部分 各ソースで共通して即時関数を使用することにより、イベントの追加、基底部分の処理の呼び出しが可能。
        var hoge = {
            app : {},
            dialog : {}
        }
        (function(hoge, $) {
            'use strict';
            var hogeApp = hoge.app;

            hogeApp.hogehogee = function() { 
                return hogeApp;
            }

            /**
             * HTML(DOM)読み込み後の処理
             */
            $(document).ready(function() {
                /**
                 * イベントハンドラ
                 */
                $('.hoge').on('click', hogehogee);
            });
            
        }(hoge, jQuery));

    java開発時に考慮
        LomBok(ロンボック)
        ⇒getter,setter,tostringなどの冗長コードの排除

    JSP
        ボタンのサイズとテキストサイズがあっていない場合にボタンのどこを押してもクリックイベントが
        出るようにする方法
            ボタンタグを囲うdivにクリックイベントを付与
            (または、jsハンドリング用のクラスをdivに設定する)

        JSTLで出力する場合:modelattributeから定義
            <form:form modelAttribute="hogehogeForm" action="${postAction}" method="post">
            <c:out value="${hogehogeFOrm.fugafugaForm.name}"/>

            htmlのname属性:modelattributeを省略して定義
            <form:hidden path="fugafugaForm.name"/>

    JAVA
        クラス一覧をjavadocからCSVに標準出力
            事前準備
                環境変数javaのbinまでのパスを追加する
                例)C:\Program Files\Java\jdk~\bin
            
            bat
                cd C:\workspace\testDocLet\bin
                javadoc -docletpath classes -doclet test.testDocLet -sourcepath 抽出したいプロジェクトパス -subpackages 抽出したいパッケージ

            java
                public final class testDocLet {
                    public static boolean start(RootDoc rootDoc) {
                        File file = new File("作成したいファイルのパス");
                        try {
                            PrintWriter out = new PrintWriter(file);
                            try {
                                writeTo(out, rootDoc);
                                if(out.checkError()) {
                                    return false;
                                }
                            } finally {
                                out.close();
                            }
                        } catch (IOException ex) {
                            throw new RuntimeException(ex);
                        }
                        return true;
                    }

                    public static LanguageVersion languageVersion() {
                        return LanguageVersion.JAVA_1_5;
                    }

                    private static void writeTo(PrintWriter out, RootDoc rootDoc) {
                        // header
                        String[] headers = new String[]{"tekitou"});
                        out.printin(headers);

                        for(ClassDoc classDoc : rootDoc.classes()) {
                            if(classDoc.name().endsWith("Form")) {
                                for(FieldDoc fieldDoc : classDoc.fields(false)) {
                                    String[] d = new String[headers.length];
                                    Arrays.fill(d, "");
                                    int i = -1;

                                    d[++i] = classDoc.name();
                                    d[++i] = fieldDoc.name();

                                }
                                out.printin(join(d));
                            }
                        }
                    }

                    private static <T> String join(T[] d ) {
                        if(d.length == 0)  {
                            return "";
                        }
                        StringBuilder s = new StringBuilder(String.valueOf(d[0]));
                        for(it i = 1; i < d.length; i++) {
                            d.append(",").append(a[i]);
                        }
                        return d.toString();
                    }
                }

            ???
                BeanPropertyRowMapper

            勉強になりそうなサイト
                コンピュータクワガタ
                気になるjava

            コーティング規約 JAVA
                JAVA
                    保管アクション checkStyle javaコンパイラ設定 firebugs の設定を規約とする
                JAVADOC
                    保管アクション checkstyleの設定を規約とする
                命名規約
                    クラス:各単語の先頭を大文字(Pascal形式)とする
                    メソッド:各単語の先頭を小文字(Camel形式)とする

                命名規約で記載する点:
                    レイヤーなど、種類、接頭語、識別子、接尾語、例
                    Model、テーブル作成時(マスタ系)、M、任意の名詞(※1)、-、Mdata
                    ※テーブル名(M_DATA)の場合
            
            コーディング規約 JSP
                コメントは<%-- --%>を使用する
                ⇒<!-- -->だとブラウザ上でソース表示時にコメントが表示されてしまう

    
                宣言・スクリプトレット<%= %>によるJavaプログラムの記述は極力避け(定数はOK)、JSTLを利用数

                暗黙オブジェクトは極力利用しない
                    ⇒request, response, pageContext, session, application, config, page, exception
                    × <%= session.getAttribute("information") %>
                    〇 ${information}
                JSPファイルの先頭はコンテンツのタイプと文字コードを定義する
                    ⇒<%@ page language="java" contentType="text/html; charset=Windows-31J"%>

                共通するJSPファイルの読み込みは<jsp:include>を利用する
                    ⇒<jsp:forward>だと呼び出し後に呼び出し側のページの実行が終了する為


                定数は独自定義せずJava側で定義したものをJSPで利用する
                    <%-- JSPファイルの上部に宣言 --%>
                    <%@ page import="~.Constants"%>
                    <%-- 定数を利用する --%>
                    <c:set var="hoge" value="<%=Constants.HOGE_HOGE%>"/>
                    <c:if test="${fuga != hoge}">

                <fmt:formatNumber>の丸めモードは近似値である為、利用時には注意
                    ⇒あらかじめControllerクラスなどで四捨五入などの丸め処理を行ったものを渡すようにする
                    <fmt:formatNumber pattern="#,##0" value="${suuchi}"/>
                
                HTMLタグを利用せず、Springタグを利用する
                    http://kuwalab.hatenablog.jp/entry/20130118/p1
                    +form:hidden

            できるようになる
                スケルトン作成
                モック作成
                ⇒画面をみてHTMLを作るトレーニング?

            作業の効率化
                修正前の値で判定してるところを探す。判定は
                合致している場合(A == B)と合致していない場合があるので、探す時は
                「= 」で探す

            JavaScript基礎
                ・等しい(===)ー同じ型に変換せず比較
                ・ひとしくない(!==) 同じ型に変換せず比較しようとして等しくないか判定

            html
                ・先頭
                    <!DOCTYPE html>
                    <html lang="ja"?
                    <head>
                    <meta charset="utf-8">
                    <meta http-equiv="X-UA-Compatible" content="IE=edge">
                    <meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no">
                    <meta name="format-detection" content="telephone=no">
                ・最後
                    JS読み込み(パフォーマンス考慮の為)

            POST⇒REDIRECT⇒GET
            PRGパターンの実装方法
                <c:url value="/パス" var="postAction" />
                <form:form modelAttribute="hogeForm" action="${postAction}" method="post">
                </form:form>

            コンテキストルート
                WEBアプリケーションの最上位のパス

            改善点
                作業確認漏れ
                    不具合内容、修正内容をあらかじめリーダーに連携せずにコミット
                    ⇒あとでリーダーに指摘され修正

            作業
                何かをまとめてくれと言われたときの自分の対応方法
                    例)未実装箇所一覧
                        No,画面一覧,未実装箇所一覧
                        ⇒1セル1画面で、足りなくなったら別シートへ
                        デメリット:足りなくなったらいちいち別シートを観なければならない
                        タスクの割り振り入力欄が入れられない
                    メリット:自分の入力が楽

                期待値:
                    No,カテゴリ[View,Controller,Service],画面,修正内容
                    ⇒1セル1修正内容
                    デメリット:自分の入力が面倒
                    メリット:そんままみんなに展開できる