2013年1月20日日曜日

JavaScriptによるPOST

単一のフォームについて削除や編集など複数のアクションを実行したい場合、
 リクエストパスを「delete」や「edit」のように変えて実行したいけどどうするのが
一般的なんだろうか。以下のように1つしか書けないし。。

    <form:form method="POST" action="delete">

調べてみたところ、submitボタンではなくbuttonでイベントを分岐し、
JavaScriptでコントロールする方法がよさそう。
実際に試してみてよさそうだったので、備忘録として残します。

以下のIDの値を削除ボタンと編集ボタンを押して、
hiddenでサーバサイドにポストする例です。

 ■JSPフォーム部分
        <c:forEach items="${subjectDtoList}" var="subjectDTO">
            <tr class="record">
            <form:form>
                <td align="center">${subjectDTO.subjectId}</td>
                <td align="left">${subjectDTO.subjectName}</td>
                <td align="center">
                    <input type="button" onclick="deleteBtn();" value="削除" />
                </td>
                <td align="center">
                    <input type=hidden name="subjectId" value="${subjectDTO.subjectId}">
                    <input type="button" onclick="editBtn();" value="編集" />
                </td>
            </form:form>
            </tr>
        </c:forEach>

■JavaScript部分
<SCRIPT Language="JavaScript">
<!--
    //削除の実行
    function deleteBtn(){
        var uri = "deleteSubject";
        moveFormDoPost(uri);
    }
    //編集の実行
    function editBtn(){
        var uri = "showEditSubject";
        moveFormDoPost(uri);
    }
    function moveFormDoPost(uri){
        //サブミット
        document.forms[1].action = uri;
        document.forms[1].method = "POST";
        document.forms[1].submit();
    }
    // -->
</SCRIPT>

■サーバサイド Controller部分

    @RequestMapping(value = "/deleteSubject", method = RequestMethod.POST)
    public ModelAndView deleteSubject(HttpSession session, SubjectDTO subjectDTO) { 省略 }

    @RequestMapping(value = "/showEditSubject", method = RequestMethod.POST)
    public ModelAndView showEditSubject(HttpSession session, SubjectDTO subjectDTO) { 省略 }

2013年1月19日土曜日

プログラミングを教えるとか

ふと思ったこと。
プログラミングは、趣味として続けることができる。
退職しても学生や社会人向けに講座を開いたりしてもよいかもなぁ。
スキルが陳腐化しないようにずっと向上していく必要があるが。

1週間ぶりのAWS

最近仕事が忙しく平日は自己研鑽ができず。。
久しぶりにAWSを触ってみることに。

普段、使わない時はマシンをシャットダウンしているので、
AWSのコンソールでマシンを起動して、
リモデでサーバに接続してみると。
IPアドレスが変わってしまい、接続できず。。

1年間フリーで使えるとはいえこれは不便だ。。
新しいIPアドレスを確認し再度ログイン。

成功。

オプションでお金を払えば固定IPアドレスを取得できるようだけど、
これは、ちょっと先かなぁ。。ドメインもほしくなるなぁ。
公開できるようなWebアプリを完成してから考えます。

因みに、AWSの仮想マシンのデスクトップには、右上にIPアドレスやスペック情報が記載されます。

2013年1月7日月曜日

RESTスタイルのURL(Springアノテーションドリブン)

RESTスタイルのURL実現の備忘録。

■Springの設定ファイルの例

<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<mvc:annotation-driven />

 ■コードの例
@Controller
 public class LoginFormController {

    @RequestMapping(value={"/loginform/login", "/"}, method = RequestMethod.GET)
     public String toLoginView(){
          return "loginform/login";
     }

2013年1月6日日曜日

アノテーションによるDI

設定ファイルにクラスを定義せずにDIする方法の備忘録。
設定ファイルもコードもかなりすっきりする!

Q:設定ファイルにクラスを定義せずにSpringはどのようにクラスを見つけるのか?

A:アノテーションを使ってSpringにクラスを登録する。

  例えば、以下のように各クラスにアノテーションを付与する。

  コントローラクラスには@Controller
  サービスクラスには、@Service
  DAOクラスには、@Repository

  Spring MVCでは、3階層構造の各層にアノテーションを割り当てている。

Q:インスタンス変数に適切なインスタンスをDIするために、どうするのか?

A:@Autowiredをつけて、そのインタフェースを実装するクラスをSpringに登録することにより、
  Springがそのインスタンスを自動的にDIする。

ただし、設定ファイルには、<context:component-scan>要素を記述する必要がある。

■コード例
@Controller
public class IndexController {
    @Autowired 
    private Shop shopService;

■Spring設定ファイル記述例
 <context:component-scan base-package="controller,dao,service" />


アノテーションを使わない場合は、下記のように記述量が多くなる。
DIするインスタンスの単位でセッターと設定ファイルの記述が必要。

■コード例
 private Shop shopService;
     public void setShopService(Shop shopService){
         this.shopService = shopService;
     }

■Springファイル記述例
 <!-- Controller -->
 <bean id="loginFormController" class="controller.LoginFormController"
  p:shopService-ref="shopService">
 </bean>

2013年1月5日土曜日

Eclipseのデバッグ


再開【F8】
次のブレークポイントまでプログラムを実行します。

ステップイン【F5】
次の1行にメソッド呼び出しが含まれている場合は、そのメソッド内部に入った状態でプログラムが中断します。

ステップオーバー【F6】
次の1行を実行します。次の1行にメソッド呼び出しが含まれている場合でも、そのメソッド呼び出しを終えた状態でプログラムが中断します。

ステップリターン【F7】
今実行中のメソッドの実行を終えて、呼び出し元へ戻ります。

Amazon Web Servicesを使ってみた!

新年、新しいことをやってみようと思いAWSのアカウントを作成してみました。
約1年間ほど無料でクラウドサーバが利用できるとのこと。

http://aws.amazon.com/jp/から右上のサインアップを選択。


I am a new user を選択しサインアップする。
その後は、指示に従って入力を進める。
注意:クレジットカードの登録も必要。


アカウントは、特に問題がなければ即発行される。
発行後は、ユーザIDとパスワードでサインアップを行う。
トップページ右上の「アカウント/コンソール」から「AWS Management Console」を選択すると下記の画面が表示される。 ここでEC2を選択する。


ネットワーク速度が低いとかなり重いためストレスを感じる。
IE8では、頻繁に下記のエラーダイアログが出力された。


右上のリストからAsia Pacific (Tokyo)を選択し、Getting StartedからLaunch Instanceをクリックする。


 以降は、後日更新予定。