SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webフレームワーク「Alinous-Core」でアプリケーション開発をはじめよう

触って試せるAlinous-Coreの基本スクリプト例12連発

例題からマスターするAlinous-Core


Webの機能に関するサンプル

 今までのところで、SQLの使いかたや変数の使いかたなど、基本的な部分は理解できたかと思います。次は、Webアプリケーションを作るためのより実践的な例を示していきます。

バリデータを使った例

 バリデータを使った例を紹介します。この例では、notnullバリデータを利用しています。また、spanタグとalns:msgalns:formalns:validate属性を利用して、バリデーションが失敗したときにのみspanタグ内の内容を表示するようにしています。

sample11.html
<html>
  <head>
    <title>SAMPLE11</title>
  </head>
  <body>
    <form name="testForm" action="sample11.html">
      FAMLYNAME<br>
      <input type="text" name="famlyname" alns:validate="notNull">
      <span alns:msg="famlyname" alns:form="testForm" 
alns:validate="notNull">
<font color="#FF0000">FAMLYNAMEを入力してください。 (デリデータチェックはクライアントで行われています)</font> </span> <br> FIRSTNAME<br> <input type="text" name="firstname" alns:validate="notNull"> <span alns:msg="firstname" alns:form="testForm"
alns:validate="notNull">
<font color="#FF0000">FIRSTNAMEを入力してください。 (表示色等は自在に変えることができます)</font> </span> <br> <input type="submit" name="submit" value="送信します"/> </form> </body> </html>

セッションと動的な画面遷移の例

 最後の例として、セッションと動的な画面遷移を利用した例を紹介します。この例では、3つの画面があります。まず最初に画面を紹介して、その画面のソースコードとの対応を説明していきます。

 まずは、最初に「http://localhost:8080/sample12.html」にアクセスしたときの画面です。この画面でFAMILYNAMEFIRSTNAMEというキーを持つセッションの値を作るため、キーに対する値をの入力をします。

最初の画面
最初の画面

 次に、最初の画面で作ったセッションの値が表示されるので、そのセッションに対して行う操作を選択し、次の画面に移動します。

セッションに対する操作選択の画面
セッションに対する操作選択の画面

 最後に、前の画面で選択された処理を行い、現在のセッションの値に対する表示を行います。

最後の画面
最後の画面

 では、実際のソースコードを見てみましょう。最初の画面のでは、$SESSION.msgの値の有無と、このページにアクセスする前にどのページにアクセスしたかを保持している$SESSION.picid変数の値に応じて行う処理を場合わけしています。$SESSIONというのは、セッションを保持するための特殊な変数で、この変数および、プロパティや、そのプロパティ変数のプロパティはセッション内に自動的に保存されます。また、$INという変数も特殊な変数で、HTTPのパラメータはこの変数のプロパティとしてスクリプトに渡されます。

sample12.alns
if($SESSION.msg == null) {
// 一番最初に画面が開かれた場合は、nullとなっています
  $MSG = "たった今セッションが作られました。";
  $SESSION.msg = "session started";
  $FAMILYNAME = "まだ入力されていません";
  $FIRSTNAME = "まだ入力されていません";

  $PUT1 = "";
  $PUT2 = "";
  
} else {
  if($SESSION.picid == "sample12-fwd3") {
    // 最終画面から遷移した場合です
    if($SESSION.famlyname == null) {
      $PUT1 = "";
    } else {
      $PUT1 = $SESSION.famlyname;
    }
    if($SESSION.firstname == null) {
      $PUT2 = "";
    } else {
      $PUT2 = $SESSION.firstname;
    }
  } else {
    // 最初の画面です
    if($IN.famlyname == null) {
      $SESSION.famlyname = "";
    } else {
      $SESSION.famlyname = $IN.famlyname;
    }
    if($IN.firstname == null) {
      $SESSION.firstname = "";
    } else {
      $SESSION.firstname = $IN.firstname;
    }
    $PUT1 = $SESSION.famlyname;
    $PUT2 = $SESSION.firstname;
  }
  
  $MSG = $SESSION.msg;
  $FAMILYNAME = $SESSION.famlyname;
  $FIRSTNAME = $SESSION.firstname;
}

$SESSION.picid = "sample12";

return 0;
sample12.html
<html>
  <head>
    <title>SAMPLE12</title>
  </head>
  <body>
    <h3>入口の画面です</h3>
    セッション状況:{$MSG}<br>
    セッション値の格納状況<br>
    FAMILYNAME:"{$FAMILYNAME}"<br>
    FIRSTNAME :"{$FIRSTNAME}"<br>
    <br>
    <br>
    <form name="testForm" action="sample12-fwd1.html">
      FAMLYNAME<br>
      <input type="text" name="famlyname" value="{$PUT1}" 
alns:validate="notNull">
<span alns:msg="famlyname" alns:form="testForm"
alns:validate="notNull">
<font color="#FF0000">FAMLYNAMEを入力してください。 (デリデータチェックはクライアントで行われています)</font> </span> <br> <br> FIRSTNAME<br> <input type="text" name="firstname" value="{$PUT2}"
alns:validate="notNull">
<span alns:msg="firstname" alns:form="testForm"
alns:validate="notNull">
<font color="#FF0000">FIRSTNAMEを入力してください。 (表示色等は自在に変えることができます)</font> </span> <br> <br> <br> <input type="submit" name="submit"
value="このボタンを押すとsample12-fwd1.htmlに遷移します"/>
</form> </body> </html>

 次に、セッションに対する操作選択の画面のソースコードを示します。ここでも、$SESSION.msgの値の有無と、このページにアクセスする前にどのページにアクセスしたかを保持している$SESSION.picid変数の値に応じて行う処理を場合分けをしています。

 注目して欲しいのは$SESSION.msgがnullの場合には、sample12.htmlをリターンしているところです。AlinousScriptでは、0以外の値が返されると、その文字列のページにフォワードされます。

sample12-fwd1.alns
// セッション変数は、セッション内で値を保障する特別な変数です。

if($SESSION.msg == null) {
// 一番最初に画面が開かれた場合は、nullとなっています
  $MSG = "今セッションが作られました。<br>
          しかしながら、直接起動されたので、abortします。<br>";
  return "sample12.html";

} else {
  // 直前に起動されたIDを調査します。
  if($SESSION.picid == "sample12") {
    //前画面の場合です
  
  } else if($SESSION.picid == "sample12-fwd1") {
    //この画面の場合です
  } else {
    //その他の画面の場合です
     // sample12.htmlにリダイレクトします。
    return "sample12.html";
  }

  $MSG = $SESSION.msg;
  // 入力変数は画面内でのみ有効ですが、他画面では利用できないので、
  // セッション変数に格納します。
  if($IN.famlyname == null) {
    $SESSION.famlyname = "";
    $FAMILYNAME = "";
  } else {
    $SESSION.famlyname = $IN.famlyname;
    $FAMILYNAME = $IN.famlyname;
  }
  if($IN.firstname == null) {
    $SESSION.firstname = "";
    $FIRSTNAME = "";
  } else {
    $SESSION.firstname = $IN.firstname;
    $FIRSTNAME = $IN.firstname;
  }
}

$SESSION.picid = "sample12-fwd1";
return 0;
sample12-fwd1.html
<html>
  <head>
    <title>SAMPLE12-fwd1</title>
  </head>
  <body>
    <h3>途中の画面です</h3>
    セッション状況:{$MSG}<br>
    セッション値の格納状況<br>
    FAMILYNAME:"{$FAMILYNAME}"<br>
    FIRSTNAME :"{$FIRSTNAME}"<br>
    <br>
    <br>
    <form name="testForm" action="sample12-fwd2.html">
      <input type="checkbox" name="chkdim[]" value="1">
        セッションを消す<br>
      <input type="checkbox" name="chkdim[]" value="2">
        FAMILYNAMEを消す<br>
      <input type="checkbox" name="chkdim[]" value="3">
        FIRSTNAMEを消す<br>
      <br>
      <input type="submit" name="submit" 
value="このボタンを押すとsample12-fwd2.htmlに遷移します"/>
</form> <br> <br> <button alns:back="true"> このボタンを押すとsample12.htmlに戻ります </button> </body> </html>

 最後の画面のソースコードを示します。このソースコードでは前の画面で入力されたチェックボックスの値に応じて処理を行っています。前画面のチェックボックスの名前はchkdim[]という名前になっています。Alinous-Coreでは、通常のフォーム入力の値は文字列で渡されますが、[]で終わる名前を持ったフォーム入力は配列の値を持つものとして解釈され、配列の値が自動的に作られます。

sample12-fwd2.alns
// セッション変数は、セッション内で値を保障する特別な変数です。

if($SESSION.msg == null) {
// 一番最初に画面が開かれた場合は、nullとなっています
  $MSG = "今セッションが作られました。<br>
          しかしながら、直接起動されたので、abortします。<br>";
  return "sample12.html";

} else {
  // 直前に起動されたIDを調査します。
  if($SESSION.picid == "sample12-fwd1") {
    //前画面の場合です

  } else if($SESSION.picid == "sample12-fwd2") {
    //この画面の場合です

  } else {
    //その他の画面の場合です
    return "sample12.html";
    // sample12.htmlにリダイレクトします。
  }

  $MSG = $SESSION.msg;
  // 入力変数は画面内でのみ有効ですが、他画面では利用できないので、
  // セッション変数に格納します。
  if($SESSION.famlyname == null) {
    $FAMILYNAME = "";
  } else {
    $FAMILYNAME = $SESSION.famlyname;
  }
  if($SESSION.firstname == null) {
    $FIRSTNAME = "";
  } else {
    $FIRSTNAME = $SESSION.firstname;
  }
}

$MSG = $SESSION.msg;
$FAMILYNAME = $SESSION.famlyname;
$FIRSTNAME = $SESSION.firstname;

// 前回のチェックボックスでの処理をします。
$i = 0;

while ($IN.chkdim[$i] != null) {
   if($IN.chkdim[$i] == "1") {
     // セッションを消す
     Variable.release($SESSION.msg);
     $MSG = "セッション消しました";
   } else if($IN.chkdim[$i] == "2") {
     // FAMILYNAMEを消す
     Variable.release($SESSION.famlyname);
     $FAMILYNAME = "FAMILYNAME消しました";
   } else if($IN.chkdim[$i] == "3") {
   // FIRSTNAMEを消す
     Variable.release($SESSION.firstname);
     $FIRSTNAME = "FIRSTNAME消しました";
   }
   $i = $i + 1;
}

$SESSION.picid = "sample12-fwd2";
return 0;
sample12-fwd2.html
<html>
  <head>
    <title>SAMPLE12-fwd2</title>
  </head>
  <body>
    <h3>最終画面です</h3>
    セッション状況:{$MSG}<br>
    セッション値の格納状況<br>
    FAMILYNAME:"{$FAMILYNAME}"<br>
    FIRSTNAME :"{$FIRSTNAME}"<br>
    <br>
    <br>
    <form name="testForm" action="sample12-fwd3.html">
      <input type="submit" name="submit" 
value="このボタンを押すとsample12に遷移します"/>
</form> </body> </html>

 そして、最後の画面にある「このボタンを押すとsample12に遷移します」というボタンを押すことで、最初のページに戻るわけですが、実際には、このサンプルでは「sample12-fwd3.html」というページを経由して最初のページに戻っています。このページのソースコードを下に示します。ここで紹介している「sample12-fwd3.html」は一応存在はしますが、「sample12-fwd3.alns」で最初のページにフォワードしてしまっているので実際には使われません。

sample12-fwd3.alns
$SESSION.picid = "sample12-fwd3";
return "sample12.html";
sample12-fwd3.html
<html>
  <head>
    <title>SAMPLE12-fwd3</title>
  </head>
  <body>
  </body>
</html>

 このサンプルを見ていただいて、Alinous-Coreでは、SQLが簡単に使えるだけでなく、かなり複雑なセッション関連のロジックなども扱えることが分かっていただけたかと思います。特に、セキュリティーを気にする場合は、セッションの変数を利用して、このサンプルのように前にアクセスしたページの状況を確認するなどして、URLをダイレクトに入力してアクセスされたら困るページに対してプロテクトをかけることができます。

まとめ

 今回は、小さな例をいくつも紹介して、それぞれの機能の使いかたについて説明しました。Alinous-Coreは、よくツールなのか言語なのかを議論するのですが、SQLとHTMLのみで簡単なアプリケーションを作るツールとしての側面も持っていますが、今回紹介したようなプログラミング言語としての側面もきちんと持っています。

謝辞

 また、今回、記事を書くにあたってこの丁寧なコメントが付いている、分かりやすいサンプルプログラムを提供して頂いた布施加工有限会社様には、この場で謝辞として感謝させていただこうと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Webフレームワーク「Alinous-Core」でアプリケーション開発をはじめよう連載記事一覧

もっと読む

この記事の著者

飯塚 友裕(イイヅカ トモヒロ)

Eclipse関連のソースコード自動生成プロダクトの開発者。ソースコード自動生成エンジンを他社に供給する技術エンジン会社「CROSSFIRE JAPAN, INC.」で、O/RマッピングツールやJavaによるSQLパーサーを開発。現在、NetBeans.org(米国)のパートナー。最近は、Alinous-Coreを利用したパッケージビジネスを行っています。SEO対策対応ECサイト構築パッケージOpen-ECAlinous-Coreのソースコードダウンロードhttp://sourceforge.jp/projects/alinous-core/はてなブログhttp://d.hatena.ne.jp/i-zuka/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1373 2008/09/03 13:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー