【JSP】ボタンでリンクと同じ動作を行う

ボタン押下時にリンク押下時と同じ動作を行う。

<input type="button" value="メニュー画面へ" onclick="location.href='Menu.jsp'" class="btn btn-default">

class属性はbootstrapの指定方法のひとつ。
ボタンを無地のデフォルトにします。

【JSP】ボタンやリンクからフォームのアクションを動的に変更しSubmit

ボタンやリンク押下時に
フォームのaction先をJavaScriptで設定し、submitする。

  • ボタンの場合

    <head>
    <script type="text/javascript">
    function exec(){
    	document.form1.value = 'ACTION001'
    	document.form1.submit();
    }
    </script>
    </head>
    
    <form action="" method="POST" name="form1">
    <input type="button" value="ボタン1" onClick="exec()" />
    </form>
    
  • リンクの場合

    <head>
    <script type="text/javascript">
    function exec(){
    	document.form1.value = 'ACTION001'
    	document.form1.submit();
    }
    </script>
    </head>
    
    <form action="" method="POST" name="form1">
    <a href="javascript:void(0)"  onClick="exec()">リンク1</a>
    </form>
    

    hrefに「javascript:void(0)」を指定しないと、
    ルート(http://localhost:8080/コンテキスト)にアクセスする。

【Eclipse】動的Webプロジェクトでのプロパティファイル読込

動的Webプロジェクトのプロパティファイル読込で
以下のように処理を書いてみました。

prop.load(new FileInputStream("hoge.properties"));

プロパティファイルをプロジェクト直下、クラスパス直下、パッケージ直下においてみましたが、
いずれも実行時にエラーになりました。
解決策として以下の通りにしました。

プロパティファイルは「WEB-INF/src」直下に配置し、
「WEB-INF/class」に自動コピーされるので、
以下のように処理を変更しました。

prop.load(this.getClass().getResourceAsStream("/hoge.properties"));

【Eclipse】classpathに書き込めませんでしたというエラーの原因

新規でプロジェクトを作成せず、
インポートしたプロジェクトに対して、外部JARファイルを追加した場合、
以下のようなエラーが出ることがあります。

ビルド・パスの設定(.classpathに書き込めませんでした)

原因は「.classpath」ファイルが隠しファイルになっているから。
「.classpath」ファイルを右クリックし、隠しファイルのチェックを外せば
エラーが解消します。

【Eclipse】動的Webプロジェクトのコピー

Eclipseで動的Webプロジェクトをコピーしたい場合、以下を行う。

  • プロジェクト名のリファクタリング
    プロジェクトで右クリックし、リファクタリングを選択する。
    変更後のプロジェクトを入力する。
  • プロジェクトのコンテキスト名変更
    プロジェクトで右クリックし、「プロパティ」を選択する。
    Webプロジェクトの設定を選択し、コンテキスト・ルートを
    コピー後のプロジェクトに合わせて変更する。
  • ローカルのTomcat設定変更
    以下ファイルの「Context docBase」のプロジェクト名を変更する。

    /workspace/Servers/ローカル・ホスト の Tomcat v7.0 サーバー-config/server.xml
    

【VisualStudio】SQLServerCompact4.0導入

ローカルDBと呼ばれるSQLServerCompact4.0を使えるようにします。
SQLServerCompact4.0はVisual Studio 2013でサポートを打ち切ったようですが、
ツールを導入すれば利用できるようになります。

「ツール」-「拡張機能と更新プログラム」を選択し、
「オンライン」を選択し、右側の検索テキストボックスで
「SQL Server Compact / SQLite Toolbox」を入力し、検索する。

検索結果でHITした「SQL Server Compact / SQLite Toolbox」を選択し、
「ダウンロード」ボタンを押下する。

インストール後、Visual Studio 2015を再起動し、
サーバーエクスプローラーを開く。
サーバーエクスプローラーのミニツールバーの右側に追加された
「SQL Server Compact / SQLite Toolbox」のアイコンをクリックする。

「Data Connections」を選択し、右クリックし、
「Add SQL Server Compact 4.0 Connection」を選択する。
Filenameで任意のDB名を入力し、Passwordに任意のパスワードを入力し、
「Create」ボタンを押下する。
「Test Connection」ボタンを押下し、接続確認できれば問題なし。

作成したDB名.sdfを選択し、右クリックし、
「Build Table」選択し、テーブルを作成する。

このようにサーバーエクスプローラーと同じ感覚で
SQL Server Compactに対して操作が可能となる。

【VisualStudio】VisualStudio導入

  • VisualStudio導入
    Visual Studio Professional 2015と同機能を持つ
    個人専用のVisual Studio Community 2015を導入しました。
    公式サイトからダウンロードし、画面の指示に従い、
    カスタムで以下をインストールしました。

    Windows and Web Development - Microsoft SQL Server Data Tools
    Windows and Web Development - Microsoft Web Developer Tools
    Common Tools - Visual Studio Extensibility Tools Update 2
    

    インストール後、アカウントのSign inを促されますが、
    スキップしたまま起動できます。
    初期状態だと英語表示なので一旦終了し、日本語パッチを適用します。

    日本語パッチ適用後、Visual Studio Community 2015を再度起動し、
    「Tools」-「Options」-「Environment」-「International Setings」を選択し、
    プルダウンから「日本語」を選択し、
    再度、Visual Studio Community 2015を再起動します。

    補足ですが、Visual Studio Community 2015をインストールすると
    2つの統合開発環境(IDE)がインストールされます。
    Windowsの左下のメニューから確認できます。

    Blend for Visual Studio 2015
    Visual Studio 2015
    

    Blend for Visual Studio 2015はXAMLを使った開発でUIデザインを行うのに適したツールらしいです。
    また、同じプロジェクトファイルを参照できるという親和性があるとか。
    通常であれば、Visual Studio 2015で十分です。
    Blend for Visual Studio 2015はデータベースエクスプローラーがなかったりで
    しばらく困惑しました。

【Excel】アンスコ区切りをキャメルケースに変換する

Javaではクラス名はアッパーキャメルケース(パスカルケース)の形式にします。
メソッド名はローワーキャメルケースの形式にします。

アッパーキャメルケース:FirstExample
ローワーキャメルケース:firstExample

エクセルでA1に「FIRST_EXAMPLE」という文字列があると仮定し、
それをアッパーキャメルケース、ローワーキャメルケースに変換します。

' アッパーキャメルケース
=SUBSTITUTE(PROPER(A1),"_","")
' ローワーキャメルケース
=LOWER(LEFT(A1,1))&MID(SUBSTITUTE(PROPER(A1),"_",""),2,LEN(A1))

【Excel】フォルダ内のエクセルファイルのオブジェクトに対して検索を行う

Dir関数を用いるため、ネットワーク上の長いファイルパスには未対応です。

Sub Test()

    ' 画面チラつきを防止する。
    Application.ScreenUpdating = False

    ' フォルダパスとファイル名を宣言する。
    Dim strFilePath As String
    Dim strFileNmae As String
         
    ' テキストボックスかセル入力でフォルダを指定させる。
    strFilePath = "C:\Users\test\Desktop\テストディレクトリ"
    
    ' 末尾が\ではない場合、\を追加する。(未実装)
    strFilePath = strFilePath & "\"
    
    ' 指定フォルダ内のファイル名を取得する。
    strFileName = Dir(strFilePath, vbNormal)

    ' 結果シートを変数に設定する。
    Dim resultBookSheet As Worksheet
    Set resultBookSheet = Worksheets("sheet1")
   
    ' 結果シートの行数を宣言する。
    Dim longGyo As Long
    longGyo = 1

    ' 指定フォルダ内のファイルがなくなるまで繰り返す。
    Do While strFileName <> ""

        Dim result As Range
        Dim firstAddress As String

        ' ファイルを開く。
        With Workbooks.Open(Filename:=strFilePath & strFileName)

            ' ファイル内のシート数を取得する。
            Dim sheetCnt As Long
            sheetCnt = .Worksheets.Count

            ' 1シート目からnシート目まで繰り返す。
            Dim i As Long
            For i = 1 To sheetCnt

                Dim shp As Shape
                ' シートからオブジェクトがなくなるまで繰り返す。
                For Each shp In .Worksheets(i).Shapes

                    ' オブジェクトにテキストを書き込める場合
                    ' shp.TextFrameはテキストが書き込めないオブジェクトでエラーが発生してしまう。
                    ' shp.TextFrame2はOffice 2007以降で利用可能だが、
                    ' テキストが書き込めないオブジェクトでもエラーが発生しない。
                    If shp.TextFrame2.HasText = True Then

                        ' 検索文字列がオブジェクト内に存在する場合
                        If InStr(shp.TextFrame2.TextRange.Text, "Excute") > 0 Then
                            resultBookSheet.Cells(longGyo, 1).Value = strFilePath & strFileName
                            resultBookSheet.Cells(longGyo, 2).Value = .Worksheets(i).Name
                            resultBookSheet.Cells(longGyo, 3).Value = "セル(" & shp.TopLeftCell.Address & ") - オブジェクト"
                            resultBookSheet.Cells(longGyo, 4).Value = shp.TextFrame2.TextRange.Text
                            longGyo = longGyo + 1
                        End If
                    End If
                Next
            Next i
            
            ' 保存せずファイルを閉じる。
            .Close SaveChanges:=False
        End With

        ' 次のファイルを取得する。
        strFileName = Dir()
    Loop
        
    ' 画面チラつき防止を解除する。
    Application.ScreenUpdating = True
    
End Sub