投稿

株式教育サイト Kabu24.tv

イメージ
株式会社東証コンピュータシステムが運営する、株式教育サイトの 「Kabu24.TV」 のシステム開発をさせて頂きました。 http://www.kabu24.tv/ 株24.TVでは、毎日の株式ニュースの動画が無料で見ることができます。 今日改めて見てみたら、最初の市況情報が1月23日!そんなに前だったっけ?と昔を懐かしがったりしましたが、1月23日から毎日の市況情報が動画で見れるんですよね、 動画でこのように過去のニュースが見れるというのは、実はすごいことなのでは? 1月からですと、あんなことや、こんなことやで、色んな事件が盛りだくさん 夏休みの最終日に、株式日記を書くのに楽だなぁと、へんな事を思ったりもしましたが、今時の小学生ならありえるかも… Share on Tumblr Tweet

CSS リキッドデザインで3段組

イメージ
CSSのレイアウトで思いっきりつまずきました。 仕様 メインコンテンツ(center)がHTMLの最初に書かれる メインコンテンツが収縮するリキッドレイアウトにする absoluteを使わずにfloatで作成する (3段組のレイアウトで、左をleft,真ん中をcenter,右をrightとしてdivのIDを付ける) ネックは、floatを設定すると幅サイズを設定しなければいけないこと、またメインコンテンツを最初に持ってこなければ比較的簡単になるが、それではだめという事 散々苦労したあげく、なんとか実現できました。1段組、2段組、3段組、共通したロジックで記述可能です。

関連するテーブルの情報取得

イメージ
RDBを利用していると、かならず複数のテーブルには関連性があります。 アプリケーションを作成するときに、それらの情報を結合して処理をすることになります。 2つのテーブルに対し別々にSQLを発行して、その結果をビジネスロジック側で結合すればよいことになりますが、iBatisでは、ResultMapの記述を工夫することで、簡単に値を取り出すことができます。 例えば、2つのテーブル(Table1とTable2)が存在し、JavaのBean側は、Bean1がBean2をプロパティとして持っているとします。 こんなときには、以下ののようなマッピングファイルを準備しましょう。 <resultMap id="bean1HasBean2" class="sample.iBatis.bean1"><result property="id" column="TABLE1_ID" /><result property="value" column="TABLE1_VALUE" /><result property="bean2Obj" column="TABLE2_ID" select="getBean2" /></resultMap><select id="getBean1" parameterClass="string" resultMap="bean1HasBean2">SELECT * FROM TABLE1 WHERE TABLE1_ID = #value#</select><select id="getBean2" parameterClass="string" resultClass="sample.iBatis.bean2">SELECT TABLE2_ID AS id, TABLE2_VALUE AS value FROM TABLE2 WHERE TABLE2_ID = #val...

Tapestry Visit and Global

イメージ
Tapestry3.0では2種類のASO(Application state Object)が用意されていました。 Visit: セッション毎に作成されるオブジェクト 例えばユーザがログインしてログアウトするまでの、状態を保持する時に使用します Global アプリケーション単位で作成されるオブジェクト アプリケーションが起動して終了するまでの状態を保持する。初期設定値等を保持するのに使用される Tapestry3では、ページやコンポーネントからの、これらのオブジェクトへのアクセスは、getVisit(), getGlobal()等のメソッドが用意されアクセスする事が可能でした。Tapestry4では、この2つの関数はまだ残っていますが、動作が異なりますので注意が必要です。 Tapestry4では、getVisit(), getGlobal()は使用せずに、自分でApplication State Objectの作成をします。 私の場合は、appVisit, appGlobalの名前で作成し、わざと従来のVisit,Globalと区別して使用しています。 hivemodule.xml <!-- Visit & Global --><contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppVisit" scope="session"><create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" /></state-object></contribution><contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppGlobal" scope="application"><create-instance class=...

iBatisで使いまわし

イメージ
SQLを使ったアプリケーションを作成していると、同じ条件文が発生したりすることがあると思います。 例えば、件数を取得するSQLと情報自体を取得するSQLなどですね。 このような場合、iBatisでは、以下のように記述することで、同じ条件文を使いまわしたりすることができるようになります。 <sql id="userWhere"><dynamic prepend="WHERE"><isPropertyAvailable prepend="AND" property="AND_id_NULL">id IS NULL</isPropertyAvailable><isPropertyAvailable prepend="OR" property="OR_id_NULL">id IS NULL</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_id_NOTNULL">id IS NOT NULL</isPropertyAvailable><isPropertyAvailable prepend="OR" property="OR_id_NOTNULL">id IS NOT NULL</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_name_EQ">name = #name#</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_name_LIKE">name like #name#</isPropertyAvailable></dynamic></sql...

Tapestry Engine Service

イメージ
Tapestry4になって、Engine Serviceの記述方法ががらっと変わりました。 Tapestry3では、application specificationに記述をしましたが、Tapestry4では、HiveMindに設定をします。 以下の設定では、dataSqueezerや、Engine Service内でVisitオブジェクトを使用したいため、サービスを追加しています。 hivemodule.xml <contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppVisit" scope="session"><create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" /></state-object></contribution><contribution configuration-id="tapestry.services.ApplicationServices"><service name="SessionService" object="service:SessionService"/></contribution><service-point id="SessionService" interface="org.apache.tapestry.engine.IEngineService"><invoke-factory><construct class="jp.co.taosoftware.tagraw.service.SessionService"><set-object property="exceptionReporter" value="infrastructure:requestExcept...

iBatisで動的SQL

イメージ
iBatisで動的なSQLを発行する方法ですが、sqlMap.xmlの内容を編集するだけです。 以下に簡単な例をあげておきます。(sqlMap内のselectタグだけ記載しています) <select id=”getUser2″ resultMap=”resultUser”> SELECT ID AS id, NAME AS name FROM USER_TABLE <dynamic prepend=”WHERE”> <isGreaterThan property=”id” compareValue=”0″> ID=#id# <isGreaterThan> </dynamic> </select>

Tapestry JavaScript (3)

イメージ
TapestryのScriptテンプレートで使用可能な残りのエレメントについて解説したいと思います。 if 名前そのままで、条件式を書くことにより、特定のJavaScriptを出力する、出力しないの指定が可能になります。 スクリプトテンプレートファイル <input-symbol key="historyList" class="java.util.List" required="yes"/><if expression="hitoryList">alert("historyList is true");</if> expressionにオブジェクトを指定するとnullの時false、それ以外の時trueになります。 もちろんhistoryListの型を、java.lang.booleanにしての条件分岐も可能です。 if-not 上記したifの逆の条件文を記述します。 スクリプトテンプレートファイル <if-not expression="hitoryList">alert("historyList is false");</if-not> include-script 外部JavaScriptファイルの読み込み指定をします。 複数のコンポーネントで使用するロジックは極力外部JavaScriptに集めブラウザのキャッシュを有効にさせる事でデータ転送量を少なくする事が可能になります。 スクリプトテンプレートファイル <script><include-script resource-path="../../taglist.js" />...</script> パスは、jwcファイルからの相対パス。もしくは/からの絶対パスを指定します。 上記の例では、WEB-INF/jwc/taglist.jwcに配置していますので、ブラウザが読み込み可能な位置(WEB-INFより上位ディレクトリ)にtaglist.jsを配置しています。 HTML出力結果 <body><script type="text/...