Webクリエイティブ集団、アイレット株式会社の代表取締役が綴る
Web制作・開発の気になる最新技術レビュー。  RSS Feeds
スカウター : [iret-ceo] アイレット株式会社CEOブログ

2007年10月31日水曜日

Teeda Ajax & JQuery

またTeeda AjaxとJQueryを使ったサンプルです。
テーブルの行の追加を何とか実装したくてJQueryを使うことにしました。
ちょっとソースは汚いですが、まだまだ効率化できるはず。
テーブルのデザイン等はスタイルシートをあてて表示
リストがしましまになるようにループ時に別のスタイルシートをあてるようにしました。


例として ポイント付与するプログラムです。
下記がHTMLの例です。
--------------------------------------------------------------------------------------------------------------------
<html xml:lang="ja" lang="ja"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:te="http://www.seasar.org/teeda/extension"
  xmlns:x="http://myfaces.apache.org/tomahawk">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <script type="text/javaScript" src="../js/ajax.js"></script>
 <script type="text/javaScript" src="../js/jquery.js"></script>
 <script type="text/javascript">
 <!--
  function usersearch_entryPage_ajaxAddPoint(res){
   var totalpoint = 0;
   // ローディングをクリア
    $('#result').empty();
    tbody = document.getElementById("Items");
    $(tbody).empty();
   // 検索結果をループで回す
   for( i=0; i < res.length; i++ ) {
     var entry = res[i];
     var tr = document.createElement( 'tr' );
     if(i % 2 == 0) $(tr).addClass("list1");
     else $(tr).addClass("list2");
     tbody.appendChild( tr );

     // 日時(date)のセル
     var tddate = document.createElement( 'td' );
     $(tddate).text( entry.pointinststamp );
     $(tddate).addClass("S3");
     tr.appendChild( tddate );

     // 種別 userPointType
     var tdtype = document.createElement( 'td' );
     var type = "";
     if(entry.userpointtype == 1)type = "登録ポイント";
     if(entry.userpointtype == 2)type = "予約ポイント";
     if(entry.userpointtype == 3)type = "クチコミポイント";
     if(entry.userpointtype == 4)type = "特別ポイント";
     if(entry.userpointtype == 5)type = "使用済みポイント";
     $(tdtype).text( type );
     $(tdtype).addClass("S3");
     tr.appendChild( tdtype );

     // ポイントのセル
     var tdpoint = document.createElement( 'td' );
     $(tdpoint).text( entry.userpoint );
     $(tdpoint).addClass("S3");
     tr.appendChild( tdpoint );
     totalpoint = totalpoint + entry.userpoint;

     // タイトル(title)+リンク(link)のセル
     var tdlink = document.createElement( 'td' );
     $(tdlink).addClass("S3");
     var center = document.createElement( 'center' );
     tdlink.appendChild( center );
     var a = document.createElement( 'a' );
     $(a).text( "削除" );
     a.href = "javascript:deletePoint(" + entry.userpointid + ")" ;
     center.appendChild( a );
     tr.appendChild( tdlink );
   }
   // 合計を表示する
   document.getElementById("totalpoint").innerHTML = totalpoint;
   document.getElementById("point").value = 0;
  }
  function addPoint(){
    tbody = document.getElementById("Items");
    $(tbody).empty();
   // ローディングを表示
    $('#result').empty().append( '<img src="../img/loading.gif" />' );
  var form = Kumu.FormHelper.create('entryForm');
   point = document.getElementById("point").value;
   userId = form["entryForm:userId"];
   if(point == undefined || point == "")point = 0;
    Kumu.Ajax.executeTeedaAjax(usersearch_entryPage_ajaxAddPoint,
[userId,point], Kumu.Ajax.RESPONSE_TYPE_JSON);
  }

  function usersearch_entryPage_ajaxDeletePoint(){
   addPoint();
  }
  function deletePoint(userPointId){
    $('#result').empty().append( '<img src="../img/loading.gif" />' );
  var form = Kumu.FormHelper.create('entryForm');
   userId = form["entryForm:userId"];
    Kumu.Ajax.executeTeedaAjax(usersearch_entryPage_ajaxDeletePoint,
[userPointId,userId], Kumu.Ajax.RESPONSE_TYPE_JSON);
  }
  -->
  -->
 </script>
  <style>
   .onTeedaError {
    background-color: #FFCCCC;
   }
   .must{
    color: #F00;
    font-size: 10px;
    font-weight: bold;
   }
   .list2 td {
    background:#EEEEEE;
   }
   .list1 td {
    background:#FFFFFF;
   }
  </style>

</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
onLoad="javascript:addPoint()">
 <form id="entryForm">
   <table width="800" border="0" cellspacing="0" cellpadding="0">
    <tr valign="top">
     <td>
      <table width="750" border="0" cellspacing="1" cellpadding="3" >
       <tr style="background:#a7dafd;">
        <th width="150" height="25" class="S3" >ポイント合計</th>
        <td class="S3" style="background:#EEEEEE;">
         <span id="totalpoint">3,000</span> ポイント
        </td>
        <th width="150" height="25" class="S3" >特別ポイント付与</th>
        <td class="S3" style="background:#EEEEEE;">
         <input type="text" id="point" size="5"
value="0"/>&nbsp;&nbsp;&nbsp;<input type="button"
onClick="javascript:addPoint()" value="ポイント付与" /><br />
        </td>
       </tr>
      </table>
      <center><p id="result"></p></center>
      <p id="url"></p>
      <table width="750" border="0" cellspacing="1" cellpadding="3">
       <thead>
        <tr style="background:#a7dafd;">
         <th width="150" class="S3">
          日付<br />
         </th>
         <th width="250" class="S3">
          種別<br />
         </th>
         <th width="200" class="S3">
          ポイント<br />
         </th>
         <th width="150" class="S3">
          削除<br />
         </th>
        </tr>
       </thead>
       <tbody id="Items">
       </tbody>
      </table>
     </td>
    </tr>
   </table>
 </form>
</body>
</html>
--------------------------------------------------------------------------------------------------------------------
Teeda Ajax
// 抜粋
public String ajaxAddPoint(int userId,int point){
  this.userId = userId;
  if(point > 0){
    // データのインサート
    usersearchLogic.insertUserPoint(userId,point,"shouhei");
   }
   // 一覧取得
   usersearchLogic.findUserPoint(this);
   // JSON形式でリストを返す
   return JSONSerializer.serialize(this.userPointList);
}