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);
}

Gmail 高速化

Gmailがこの数週間ので高速化されるらしい
Gmailユーザーの私にとってはうれしいニュースだ

http://internet.watch.impress.co.jp/cda/news/2007/10/31/17356.html

Google SketchUp 日本語リリース

Google SketchUp日本語がリリース
どこまで使えるかわからないけどまずは使ってみないと
http://internet.watch.impress.co.jp/cda/news/2007/10/30/17353.html

2007年10月29日月曜日

Teeda AJAX 郵便番号検索

またまたTeedaAjaxネタ

HTML上
・住所検索ボタンを配置
・都道府県 spanタグで固定文字列
・市区町村 spanタグで固定文字列
・その他住所 inputタグ

住所ボタンを押した際javascriptでonClickでgetZipを呼び出す。
Javaのほうは以前の記事参照TeedaAjax,Kumu Ajax

ここでの肝はspanタグの変更
innerHTMLの変更。これすぐ忘れちゃうからメモメモ

function usersearch_entryPage_ajaxZip(res){
document.getElementById("prefName").innerHTML = res.prefname;
document.getElementById("cityName").innerHTML = res.cityname;
document.getElementById("userAddress").value = res.address1;
}
function getZip(){
var form = Kumu.FormHelper.create('entryForm');
zip3 = form["entryForm:zip3"];
zip4 = form["entryForm:zip4"];
Kumu.Ajax.executeTeedaAjax(usersearch_entryPage_ajaxZip, [zip3,zip4], Kumu.Ajax.RESPONSE_TYPE_JSON);
}

2007年10月26日金曜日

日付関数 mysql postgres oracle

すぐ忘れてしまうので各DBごとの日付関数

mysql
select date_format(now(), '%Y%m%d')

Oracle
select to_char(sysdate,'yyyymmdd') from dual

postgres
select to_char(current_timestamp, 'yyyymmdd');


すべて結果は
-------------------------------
20071026

2007年10月25日木曜日

Mysql 年齢計算

userテーブルに入っている誕生日の日付から年齢を求める
SQL文

user table
USER_BIRTHDAY date

select
(YEAR(CURDATE())-YEAR(ub.USER_BIRTHDAY)) - (RIGHT(CURDATE(),5)<RIGHT(USER_BIRTHDAY,5)) as age
from
user

Kumu Ajax

Teedaで使う際にはKumu Ajax便利だな

form id="Form"とする
inputタグのid="test"とid指定するとnameが
Form:testとなる。こうなるとJavaScriptで値をとるのに面倒
だがKumu Ajaxをつかうとすぐとれる!

// FormをJSON化する
var form = Kumu.FormHelper.create('Form');

//name属性がtestの値を取得
var value = form['Form:test']

http://teeda.seasar.org/ja/kumu_ajax.html

Gmail IMAP

GmailがIMAPサポートを開始した。
あいかわらずGoogleはやることがはやい。
詳しくは
http://internet.watch.impress.co.jp/cda/news/2007/10/25/17297.html

しかもGmailの容量が日に日に増えている。
すでに4.3GB
まだ増えるんだろうな。。。Gmailユーザーとしてはうれしい内容
現在私は3GB使っている。。。もっとふえてくれー

2007年10月24日水曜日

Google 携帯ネタ

Googleは日本の携帯に特化した戦略をとっている
すばらしい!

今後のGoogleの携帯インターフェースに注目
携帯産業も増えてきているのでこの辺の知識はいれておかないと

http://itpro.nikkeibp.co.jp/article/NEWS/20071023/285302/
http://itpro.nikkeibp.co.jp/article/NEWS/20071023/285263/

2007年10月23日火曜日

Teeda Ajax

Teeda Ajaxはほんと簡単!
皆さん使いましょう。

さて内容ですが
Teeda(Seaser2.4)を使っている人はすでにSmartDeployですでにセットアップされている
と思います。

TeedaAjaxを使うためにはまず
1.必要コンポーネント 
ajax.js teeda-ajax-1.0.xxxxx.jar

2.HTMLの書き方
  ○下記をインクルード (Pathはそれぞれに設定してください)
<script type="text/javaScript" src="../js/ajax.js" />
  
  ○SelectBoxの準備
<select id="prefCd" onchange="getCity(this.value);">
<option value="" selected="selected">全て</option>
<option value="1">北海道</option>


</select>

  ○あとはJavascript関数定義
usersearch_indexPage_ajaxCity
パッケージ名 + "_" + TeedaPage名 + "_" + ajax関数名
で関数を作る

サンプル(都道府県から市区町村をとる仕組み)
<script type="text/javascript">
function usersearch_indexPage_ajaxCity(res){
//document.indexForm.cityCdはSelectBoxの値
createCityOptions(res, document.indexForm.cityCd);
}
function getCity(prefCd){
// 引数 prefCd 都道府県コード
 Kumu.Ajax.executeTeedaAjax(usersearch_indexPage_ajaxCity, [prefCd], Kumu.Ajax.RESPONSE_TYPE_JSON);
}
</script>

3.Pageの準備
  ここので注意点としてSmartDeployは関数名をajaxと頭につける
  「ajax+関数名」

package jp.co.iret.ceo.web.usersearch;

public class IndexPage{
public String ajaxCity(String prefCd){
// KuinaDaoでデータを取得
List<Map> list = usersearchLogic.findCityList(prefCd);
// JSONに変換 これ便利(中身の確認はデバックモードでみればすぐわかる)
return JSONSerializer.serialize(list);
}
}

4.受け取り側のJavaScript
こんな感じでJSONで受取り、Select値に当てはめていく
function createCityOptions(json,opt){
var dataCnt = json.length;
for (var i = 0; i < json.length; i++) {
var detail = json[i];
opt.options[i] = new Option(detail.label, detail.value);
}
}

関連記事

Teeda SmartDeploy 設定確認

SmartDeployモードを確認するためにWEBでみれることがわかった
これは確認に便利

下記のように自分のWEBを立ち上げて確認
http://localhost:8080/[ここは自分のcontext]/teedaServlet?command=list

Teeda NullLabel設定

SelectボックスのNullLabelの設定を選択してくださいから変えたい場合
appMessages_ja.properties(appMessages.properties)に
下記を追加
org.seasar.teeda.extension.component.TSelect.NULL_LABEL = 選択シテに変更!

一個一個変えたいんだけどな~ちょっと無理そう
これやるとすべてのSelectボックスがかわっちゃうのでとりあえず空にしています

The Blogger GData JS Client library

The Google Data APIs TeamがBloggerのAPIを公開
私のBlogがBloggerなためうれしい情報だ

今後BlogなどAPIで連携し、お客さんの中にBlogのデータベースを
もたずにAPIだけで操作しこなしていけるのではないかとおもっている
http://journal.mycom.co.jp/news/2007/10/23/013/index.html

Google Analytics

Google Analyticsの検索レポーティング機能とイベント追跡機能を追加を行うらしい

一部抜粋
今回、グーグルが強化したのはBIの部分で、イベント追跡機能を追加することにより、訪問者がサイトのインタラクティブな要素(Ajax、JavaScript、Flash動画、ページガジェット、ダウンロードなど)にどう反応したかを測定することを可能にした。

今後レポート機能はAnalyticsできまりだな。。。

http://www.atmarkit.co.jp/news/200710/22/google.html

2007年10月19日金曜日

Office Live Workspace

Office Live Workspaceが初公開

今後GoogleDocsとの勝負か
日本語版はまだまだ時期未定だけど、今後どっちになるのかな?
でもこれは商用か?
http://itpro.nikkeibp.co.jp/article/NEWS/20071018/284955/

2007年10月12日金曜日

Adobe Thermo続き

Adobe Thermoの続きネタ

便利だなこれ 早めに着手したいところ
http://journal.mycom.co.jp/articles/2007/10/12/thermo/index.html

2007年10月11日木曜日

Adobe Share

おもな特徴

  • Flexを用いた、非常に使い勝手の良いユーザインタフェース
  • 共有ファイルの容量は合計で1ギガバイトまで利用できる
  • ファイルをダウンロードすることなくプレビューすることが可能
  • 簡単なHTMLタグにより、プレビューを他のWebページに埋め込むことができる
Excel、Word、PowerPointはGoogleDocsと考えているが、
PDF、画像等の共有は「Adobe Share」かな
動画もあげれるが1GBかあ~

http://journal.mycom.co.jp/articles/2007/10/11/share1/index.html

2007年10月10日水曜日

Flash10 Astro

またまたAdobeMax2007話題

Flash10 開発コード「Astro」
おもな特徴は3DとAftereffectと似たような効果が利用できるようになるらしい
やばいぞ Flash10

http://journal.mycom.co.jp/articles/2007/10/03/max1/003.html

Flexが熱い!Thermo

Adobe MAX 2007 North Americaにおいて、RIA(Rich Internet Application)向けの新開発環境「Thermo(開発コード名)」を発表した。

最大の特徴は、psdファイル(Photoshopで作成したアプリケーション)等を取り込み、MXMLファイル(FlexアプリケーションのUI定義ファイル)として出力できる点
(Illustratorもできるらしい)

FLEX今後目が離せない。

http://journal.mycom.co.jp/news/2007/10/03/002/

2007年10月9日火曜日

Postgres8.3 beta

Postgres8.3 Betaが公開
弊社でもPostgresのシステムを使っているのがあるからこちらもチェックしなければ
かなりスピード向上するらしい

たのしみ~メンテが楽になるといいな
http://journal.mycom.co.jp/news/2007/10/09/025/index.html

Adobe Flash Lite3

まちにまったFlashLite3リリース!
ドコモとノキアが導入するらしい
ドコモの次の905iで対応するのか?

http://journal.mycom.co.jp/news/2007/10/02/027/index.html

2007年10月5日金曜日

Flash最大サイズ

Flash Player では、ビットマップの最大サイズは幅、高さいずれも 2880 ピクセルに制限されています。この制約よりも大きい BitmapData インスタンスを作成しようとすると、ビットマップは作成されません。これは、クライアントの RAM を使い切るような Flash ムービーを作成できないようにするために設定されています。2880 × 2880 ピクセルのビットマップには、約 32 MB 程度の RAM が必要です。

Flash HTML 透過

FlashとHTMLが重なっている場合
(メニューとか)
その場合下記のようにwmode transparentをObjectタグにいれる
<param name=\"wmode\" value=\"transparent\" />
FireFox、Safariに対してはembedタグ内に追加
<embed src=\"" + flashswf + "\" wmode=\"transparent\"

2007年10月2日火曜日

Adobe Media Player

2008年にAdobeMediaPlayer
今後のWEBビデオ系はCMをじゃんじゃん勝負することになるんだろうな?

http://internet.watch.impress.co.jp/cda/news/2007/06/01/15915.html

H.264コーデックサポートするらしい
これはでかい。AdobeMax2007でデモするらしいし必ず行かないとな
http://japan.cnet.com/news/ent/story/0,2000056022,20354939,00.htm

Adobe Share

Adobe Share
Virtual Ubiquityは従業員数11人の新興企業で、オンラインワープロ「Buzzword」を手掛けている。Buzzwordは現在プレビュー版として限定 的に公開されている。このソフトはアドビのFlexで構築され、Adobe Flash Playerで動作し、ユーザーは共同で文書を編集することもできる。

GoogleDocsとどっちがいいんだろう??

http://www.atmarkit.co.jp/news/200710/01/adobe.html

iPhone開発

iPhoneの開発は今後楽しみ
今後のモバイル時代のために開発をし続けないと
インターフェースが面白いのでぜひ着手したいところ

http://developer.apple.com/jp/iphone/designingcontent.html