<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>イージーネット Tech Blog &#187; プログラム</title>
	<atom:link href="http://blog.eni.co.jp/tech/category/program/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.eni.co.jp/tech</link>
	<description>株式会社イージーネットのスタッフによる技術系ブログです</description>
	<lastBuildDate>Tue, 12 Jan 2010 01:46:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/category/program/feed" />
		<item>
		<title>ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（完）</title>
		<link>http://blog.eni.co.jp/tech/2010/01/extjs3_grid_table_last.html</link>
		<comments>http://blog.eni.co.jp/tech/2010/01/extjs3_grid_table_last.html#comments</comments>
		<pubDate>Tue, 12 Jan 2010 01:20:58 +0000</pubDate>
		<dc:creator>笹山 昭秀</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ext.grid.GridPanel]]></category>
		<category><![CDATA[Ext.Template]]></category>
		<category><![CDATA[Ext.ux.form.SearchField]]></category>
		<category><![CDATA[Ext.ux.grid.RowExpander]]></category>
		<category><![CDATA[ExtJS3.0]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1760</guid>
		<description><![CDATA[
このエントリーは下記の記事の続きです。
ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）
ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その２）

遅くなりましたが、明けましておめでとうございます。
笹山です。
前回の記事から更新が滞ってしまいました。（気づいたら2010年！）
記事用の時刻表ExtJSソースは準備していたのですが更新を怠けておりました。
（怠けている間にExt JS 3.1.0がリリースされておりました）
ですので必死で思い出しながら書きます。（本当に完全に忘れている・・・やばい。）
今回はExtJS3.0を用いて時刻表を作成する完結編です。
前回は、

ページング機能
Gridの高さ変更
Grid内のツールチップ表示

について書きましたが、やはり検索機能や飛行機の情報なんかも欲しくなるわけです。
今回は検索機能、飛行機の情報表示を実装してオレオレ時刻表の作成を終わりたいと思います。

検索機能の実装
検索機能の実装も難しくはありません。
実はExt.ux.data.PagingMemoryProxyのdoRequestメソッドにはすでにfiltering機能が備わっています。
前回Ext.ux.data.PagingMemoryProxyを使用したソートで問題があったので、オーバーライドしてoverride-paging-memory-proxy.jsを作成しました。
ですからoverride-paging-memory-proxy.jsを使用して検索機能を実装します。


override-paging-memory-proxy.js（フィルタリング部分）



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Ext.override&#40;Ext.ux.data.PagingMemoryProxy,&#123;
    doRequest: function&#40;action, rs, params, reader, callback, scope, options&#41;&#123;
&#160;
～　省略　～
&#160;
        // filtering
        if &#40;params.filter !== undefined&#41; &#123;
            result.records = result.records.filter&#40;function&#40;el&#41;&#123;
       [...]]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーは下記の記事の続きです。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）</a><br />
<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その２）</a>
</div>
<p>遅くなりましたが、明けましておめでとうございます。<br />
笹山です。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html" target="_blank">前回</a>の記事から更新が滞ってしまいました。（気づいたら2010年！）<br />
記事用の時刻表ExtJSソースは準備していたのですが更新を怠けておりました。<br />
（怠けている間に<a href="http://extjs.co.jp/products/extjs/download.php" target="_blank">Ext JS 3.1.0</a>がリリースされておりました）<br />
ですので必死で思い出しながら書きます。（本当に完全に忘れている・・・やばい。）</p>
<p>今回はExtJS3.0を用いて時刻表を作成する完結編です。<br />
<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html" target="_blank">前回</a>は、</p>
<ul>
<li>ページング機能</li>
<li>Gridの高さ変更</li>
<li>Grid内のツールチップ表示</li>
</ul>
<p>について書きましたが、やはり検索機能や飛行機の情報なんかも欲しくなるわけです。<br />
今回は検索機能、飛行機の情報表示を実装してオレオレ時刻表の作成を終わりたいと思います。</p>
<p><span id="more-1760"></span></p>
<h3>検索機能の実装</h3>
<p>検索機能の実装も難しくはありません。<br />
実はExt.ux.data.PagingMemoryProxyのdoRequestメソッドにはすでにfiltering機能が備わっています。<br />
<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html" target="_blank">前回</a>Ext.ux.data.PagingMemoryProxyを使用したソートで問題があったので、オーバーライドして<a href="http://blog.eni.co.jp/tech/misc/extjs/part2/override-paging-memory-proxy.js" target="_blank">override-paging-memory-proxy.js</a>を作成しました。<br />
ですから<a href="http://blog.eni.co.jp/tech/misc/extjs/part2/override-paging-memory-proxy.js" target="_blank">override-paging-memory-proxy.js</a>を使用して検索機能を実装します。</p>
<ul>
<li>
override-paging-memory-proxy.js（フィルタリング部分）
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p17607"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p1760code7"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">override</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">PagingMemoryProxy</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>
    doRequest<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>action<span style="color: #339933;">,</span> rs<span style="color: #339933;">,</span> params<span style="color: #339933;">,</span> reader<span style="color: #339933;">,</span> callback<span style="color: #339933;">,</span> scope<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
～　省略　～
&nbsp;
        <span style="color: #006600; font-style: italic;">// filtering</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span> <span style="color: #339933;">!==</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result.<span style="color: #660066;">records</span> <span style="color: #339933;">=</span> result.<span style="color: #660066;">records</span>.<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'object'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> att <span style="color: #339933;">=</span> params.<span style="color: #660066;">filterCol</span> <span style="color: #339933;">||</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> String<span style="color: #009900;">&#40;</span>el.<span style="color: #660066;">data</span><span style="color: #009900;">&#91;</span>att<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> String<span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">totalRecords</span> <span style="color: #339933;">=</span> result.<span style="color: #660066;">records</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<p>これを見るとリクエストパラメータに、「filterCol」と「filter」を指定すれば良いことが分かります。<br />
filterColでGridのカラム位置を指定して、「Gird要素内容」と「filter」をmatchメソッドを用いて検索を行っています。</p>
<p>それでは、Gridのカラムと検索文字列を指定して、Grid内のデータから検索ができるようにしてみます。<br />
「カラムを指定するためのComboBox」と「検索文字列を入力するFiled」をGridトップツールバーに作成します。<br />
<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html" target="_blank">前回</a>の<a href="http://blog.eni.co.jp/tech/misc/extjs/part2/grid-timetable.js" target="_blank">grid-timetable.js</a>を編集して追加していきます。</p>
<h4>カラム指定のためのComboBox作成（Ext.form.ComboBox）</h4>
<p>まずは「検索カラムを指定するためのComboBox」をgrid-timetable.jsに作成します。</p>
<ul>
<li>
grid-timetable.js
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p17608"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
</pre></td><td class="code" id="p1760code8"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//</span>
    <span style="color: #006600; font-style: italic;">// カラムを指定するためのComboBox</span>
    <span style="color: #006600; font-style: italic;">//</span>
    <span style="color: #003366; font-weight: bold;">var</span> filterColCombo <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">form</span>.<span style="color: #660066;">ComboBox</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        id<span style="color: #339933;">:</span> <span style="color: #3366CC;">'filtercol_combo_id'</span><span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span>
        triggerAction<span style="color: #339933;">:</span> <span style="color: #3366CC;">'all'</span><span style="color: #339933;">,</span>
        valueField<span style="color: #339933;">:</span> <span style="color: #3366CC;">'value'</span><span style="color: #339933;">,</span>
        displayField <span style="color: #339933;">:</span> <span style="color: #3366CC;">'view'</span><span style="color: #339933;">,</span>
        value<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span><span style="color: #339933;">,</span>
        editable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        mode<span style="color: #339933;">:</span> <span style="color: #3366CC;">'local'</span><span style="color: #339933;">,</span>
        store<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">ArrayStore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            fields<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'view'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
            data<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'destination'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'航空会社'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'airline'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'便名'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'flightName'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'機種'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'model'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'伊丹空港時間'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'対象空港時間'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'出発/到着種別'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'type'</span><span style="color: #009900;">&#93;</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        listeners<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #3366CC;">'select'</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
                fn<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>combo<span style="color: #339933;">,</span> record<span style="color: #339933;">,</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    store.<span style="color: #660066;">baseParams</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
                        sort<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
                        dir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ASC'</span><span style="color: #339933;">,</span>
                        filterCol<span style="color: #339933;">:</span> record.<span style="color: #660066;">data</span>.<span style="color: #660066;">value</span><span style="color: #339933;">,</span>
                    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'afterrender'</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
                fn<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>combo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    store.<span style="color: #660066;">baseParams</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
                        sort<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
                        dir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ASC'</span><span style="color: #339933;">,</span>
                        filterCol<span style="color: #339933;">:</span> combo.<span style="color: #660066;">value</span><span style="color: #339933;">,</span>
                    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<p>詳細はExtJS3.0の<a href="http://docs.ext-japan.org/docs/" target="_blank">APIドキュメント（日本語）</a>も出たことですし、そちらを見ていただくとして、今回はポイントだけを書きます。</p>
<ul>
<li>
ComboBoxのValue値がGridカラムのdataIndex値と一致するようにComboBoxを作成します。これによりフィルタリング時にGridカラムから値を取り出すことが可能になります。
</li>
<li>
ComboBoxのイベント処理「select」で、ComboBoxが選択された後にリクエストパラメータを設定します。ComboBoxの選択値「record.data.value」をfilterColに設定、同時にソートフィールド、ソート方向も設定しています。
</li>
<li>
ComboBoxのイベント処理「afterrender」で、ComboBoxがレンダリングされた後にリクエストパラメータを設定します。ComboBoxの初期値「combo.value」をfilterColに設定、同時にソートフィールド、ソート方向も設定しています。
</li>
</ul>
<h4>検索文字列を入力するFiled作成（Ext.ux.form.SearchField）</h4>
<p>次に検索文字列を入力するFiledをgrid-timetable.jsに作成します。<br />
すでにExt.ux.form.SearchFieldという便利なコンポーネントが用意されています。</p>
<ul>
<li>
grid-timetable.js
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p17609"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p1760code9"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> filterColCombo <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">form</span>.<span style="color: #660066;">ComboBox</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
～　省略　～
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Store</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
～　省略　～
&nbsp;
    <span style="color: #006600; font-style: italic;">//</span>
　　<span style="color: #006600; font-style: italic;">//　検索文字列を入力するFiled</span>
    <span style="color: #006600; font-style: italic;">//</span>
    <span style="color: #003366; font-weight: bold;">var</span> searchField <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">form</span>.<span style="color: #660066;">SearchField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> <span style="color: #CC0000;">200</span><span style="color: #339933;">,</span>
        paramName<span style="color: #339933;">:</span> <span style="color: #3366CC;">'filter'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<ul>
<li>
検索時のデータソースとして使用するstoreには、Gridで使用するものと同じstoreを指定します。
</li>
<li>
Ext.ux.form.SearchFieldのデフォルトのリクエストパラメータは「query」となっているため、「filter」に変更します。これでリクエストパラメータが「filter」となり、<a href="http://blog.eni.co.jp/tech/misc/extjs/part2/override-paging-memory-proxy.js" target="_blank">override-paging-memory-proxy.js</a>（フィルタリング部分）で使用できるようになります。</li>
</ul>
<h4>Gridトップツールバーへ追加</h4>
<p>先ほど作成した「カラムを指定するためのComboBox」と「検索文字列を入力するFiled」をGridトップツールバーに追加します。</p>
<ul>
<li>
grid-timetable.js
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p176010"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code" id="p1760code10"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
～　省略　～
&nbsp;
        <span style="color: #006600; font-style: italic;">//</span>
        <span style="color: #006600; font-style: italic;">// Gridトップツールバー</span>
        <span style="color: #006600; font-style: italic;">//</span>
        tbar<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            filterColCombo<span style="color: #339933;">,</span>
            searchField
        <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<ul>
<li>
GridPanelのトップツールバー(tbar)に、先ほど作成したfilterColComboとsearchFieldを指定します。
</li>
</ul>
<p>たったこれだけで検索機能は完成です。</p>
<div id="attachment_1944" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/combo_searchfield.PNG" target="_blank"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/combo_searchfield-300x140.PNG" alt="検索カラム指定ComboBoxと検索文字列入力Field" title="検索カラム指定ComboBoxと検索文字列入力Field" width="300" height="140" class="size-medium wp-image-1944"/></a><p class="wp-caption-text">検索カラム指定ComboBoxと検索文字列入力Field</p></div><br />
<center>↓</center><br />
<div id="attachment_1945" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/search_result.PNG" target="_blank"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/search_result-300x139.PNG" alt="便名指定からの検索結果" title="便名指定からの検索結果" width="300" height="139" class="size-medium wp-image-1945"　 /></a><p class="wp-caption-text">便名指定からの検索結果</p></div>
<h3>Grid内に画像付きの飛行機情報を表示する</h3>
<p>Gridに表示されている機種は「どんな飛行機なんだろう？」と思ったりしませんか？<br />
それでは、Ext.ux.grid.RowExpanderを使用して画像付きの簡単な機種情報が出るようにしてみようと思います。</p>
<h4>画像付きの飛行機情報表示機能作成（Ext.ux.grid.RowExpander）</h4>
<p>Ext.ux.grid.RowExpanderを使うと、Gridの各行に[+][-]アイコンを表示して、そのアイコンで行を伸縮し、付加情報を表示／非表示にすることができます。<br />
また表示する情報はExt.Templateを用いて自由にレイアウトすることができます。</p>
<ul>
<li>
grid-timetable.js
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p176011"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p1760code11"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> expander <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">grid</span>.<span style="color: #660066;">RowExpander</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        tpl <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Template</span><span style="color: #009900;">&#40;</span>
            <span style="color: #3366CC;">'&lt;table&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'    &lt;tr&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'        &lt;td&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'            &lt;img src=&quot;../plainmodel/{airline}/{model}.jpg&quot; alt=&quot;{model}&quot;&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'        &lt;/td&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'        &lt;td&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'            &lt;iframe src=&quot;../plainmodel/{airline}/{model}.html&quot; width=&quot;500&quot; height=&quot;100&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'        &lt;/td&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'    &lt;/tr&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'&lt;/table&gt;'</span>
        <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<ul>
<li>
GridのColumns配列内にexpanderを作成するため、Ext.Template を使うことにより {キー名}の箇所がGrid dataIndexから取り出された値で置き換えられます。
</li>
<li>
{キー名}から取り出された値がフォルダ名、ファイル名となるようにしています。<br />
あらかじめ画像やHTMLが表示されるようにデータを準備して配置しています。<br /><strong>（例）{airline}キーの値がANA、{model}キーの値がB7の場合</strong>
<ul>
<li>img src=&#8221;../plainmodel/ANA/B7.jpg&#8221;</li>
<li>iframe src=&#8221;../plainmodel/ANA/B7.html&#8221;</li>
</ul>
</li>
</ul>
<h4>GridのColumns配列に追加</h4>
<p>先ほど作成したexpanderをGridのColumns配列に追加します。</p>
<ul>
<li>
grid-timetable.js
</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p176012"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p1760code12"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
～　省略　～
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'時刻表'</span><span style="color: #339933;">,</span>
        frame<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        height<span style="color: #339933;">:</span> <span style="color: #CC0000;">350</span><span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> <span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>
        renderTo<span style="color: #339933;">:</span> <span style="color: #3366CC;">'grid-timetable'</span><span style="color: #339933;">,</span>
        stripeRows<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        trackMouseOver<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
            columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
　　　　　　　　　<span style="color: #006600; font-style: italic;">//</span>
                <span style="color: #006600; font-style: italic;">// 画像付きの飛行機情報を表示Expander</span>
                <span style="color: #006600; font-style: italic;">//</span>
                expander<span style="color: #339933;">,</span>　　<span style="color: #006600; font-style: italic;">//← ここ</span>
               <span style="color: #009900;">&#123;</span>
                  header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span>
                  sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                  dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span><span style="color: #339933;">,</span>
                  renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span> params<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                      params.<span style="color: #660066;">attr</span> <span style="color: #339933;">=</span> getQtipAttr<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;対象空港&quot;</span><span style="color: #339933;">,</span> v<span style="color: #339933;">,</span> 100<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                      <span style="color: #000066; font-weight: bold;">return</span> v<span style="color: #339933;">;</span>
                  <span style="color: #009900;">&#125;</span>
              <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
～　省略　～</pre></td></tr></table></div>

<p>たったこれだけで、こんなにリッチになります。どうですか？<br />
<div id="attachment_1964" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/grid_expander.PNG" target="_blank"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/12/grid_expander-300x141.PNG" alt="Grid Expander 画像付きの飛行機情報を表示する" title="Grid Expander 画像付きの飛行機情報を表示する" width="300" height="141" class="size-medium wp-image-1964" /></a><p class="wp-caption-text">Grid Expander 画像付きの飛行機情報を表示する</p></div></p>
<h3>今回のソースとデモ</h3>
<ul>
<li>
<a href="http://blog.eni.co.jp/tech/misc/extjs/part3/grid-timetable.html" target="_blank" >ExtJS3.0 Gridデモ「伊丹空港 12月時刻表」</a>
</li>
<li>
<a href="http://blog.eni.co.jp/tech/misc/extjs/part3/grid-timetable.js" target="_blank" >grid-timetable.js</a>
</li>
<li>
<a href="http://blog.eni.co.jp/tech/misc/extjs/part3/override-paging-memory-proxy.js" target="_blank" >override-paging-memory-proxy.js</a>
</li>
<li>
<a href="http://blog.eni.co.jp/tech/misc/extjs/data/timetable-data12.js" target="_blank" >timetable-data12.js</a>
</li>
</ul>
<p>※Grid中の飛行機画像は私が趣味で撮影した画像です。</p>
<h3>最後に</h3>
<p>時刻表の完成です。<br />
これでエアーバンドを聞きながら検索をかけて、しかも飛行機情報まで表示してくれます。<br />
ずいぶんと私好みの自己中心的な時刻表になってしまいました。</p>
<p>ExtJSで、ごりごり実装することもなく簡単にリッチなテーブルができることがお分かりいただけたと思います。<br />
余裕があるときに改造して「おれおれ時刻表」をパワーアップしていけたらと思っています。</p>
<h3>参考リンク</h3>
<ul>
<li>
<a href="http://www.extjs.com/">Ext</a>
</li>
<li>
<a href="http://extjs.co.jp/">Ext Japan</a>
</li>
<li>
<a href="http://www.extjs.com/deploy/dev/examples/samples.html">Ext JS 3.0 Samples</a>
</li>
<li>
<a href="http://www.extjs.com/deploy/dev/docs/">API Document</a>
</li>
<li>
<a href="http://docs.ext-japan.org/docs/" target="_blank">APIドキュメント（日本語）</a></li>
</ul>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その２）</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2010/01/extjs3_grid_table_last.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2010/01/extjs3_grid_table_last.html" />
	</item>
		<item>
		<title>Wicket小話その3. Wicketで確認メッセージを出すにはどうすればよいのか？(その2)</title>
		<link>http://blog.eni.co.jp/tech/2009/09/wicket_03_confirm02.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/09/wicket_03_confirm02.html#comments</comments>
		<pubDate>Tue, 29 Sep 2009 08:20:46 +0000</pubDate>
		<dc:creator>武輪 恭代</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1812</guid>
		<description><![CDATA[ども、武輪です。
前回のWicket小話で、Confirmメッセージを出すにはどうすればよいのか？と言った話をしたのですが、今回も引き続きConfirmメッセージの話をしたいと思います。
前回、AjaxボタンでConfirmメッセージを表示する方法として、Wicket-extensionのコンポーネントであるModalWindowを使い、独自のポップアップメッセージを表示する方法をとりました。
しかしながら、これってぶっちゃけConfirmメッセージじゃないよね…！
というわけで今回はAjaxボタンで正真正銘(?)のConfirmメッセージを表示する方法をご紹介します。

AjaxボタンでConfirmメッセージ
&#62;Ajaxで中身を入れ替える以上、onclickアトリビュートをいじるのはややこしそうなので&#8230;
と前回書いたのですが、
「confirmで確認後、OKだったら既存AjaxのJavaScriptを実行してあげて、キャンセルだったらfalseを返す」
ようなJavaScriptを書けば問題ないんじゃ…？と思いまして。
そんなわけでさらっとサンプルを書いてみました。
サンプルは前回同様、ボタンを押した時に確認メッセージを表示し、OKだったらカウントする、キャンセルだったら何もしない、といった仕様です。
Confirm2.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Confirm2 extends WebPage&#123;
&#160;
	private int count = 0;
	private Label result;
&#160;
	/**
	 * コンストラクタ
	 */
	public Confirm2&#40;&#41; &#123;
		add&#40;result = new Label&#40;&#34;result&#34;, new PropertyModel&#60;Integer&#62;&#40;this, &#34;count&#34;&#41;&#41;&#41;;
		result.setOutputMarkupId&#40;true&#41;;
		Form&#60;?&#62; form = new Form&#60;Confirm2&#62;&#40;&#34;form&#34;&#41;;
&#160;
		form.add&#40;new AjaxButton&#40;&#34;count&#34;, new Model&#60;String&#62;&#40;&#34;カウントしますか？&#34;&#41;&#41;&#123;
&#160;
			private static final long serialVersionUID = 1L;
&#160;
			@Override
			protected void onSubmit&#40;AjaxRequestTarget target, Form&#60;?&#62; form&#41; &#123;
				count++;
				target.addComponent&#40;result&#41;;
			&#125;
&#160;
			@Override
			protected IAjaxCallDecorator getAjaxCallDecorator&#40;&#41; &#123;
				return new AjaxPreprocessingCallDecorator&#40;super.getAjaxCallDecorator&#40;&#41;&#41; &#123;
					private static final long serialVersionUID = 1L;
&#160;
					@Override
					public CharSequence preDecorateScript&#40;CharSequence [...]]]></description>
			<content:encoded><![CDATA[<p>ども、武輪です。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html">前回のWicket小話</a>で、Confirmメッセージを出すにはどうすればよいのか？と言った話をしたのですが、今回も引き続きConfirmメッセージの話をしたいと思います。</p>
<p>前回、AjaxボタンでConfirmメッセージを表示する方法として、Wicket-extensionのコンポーネントであるModalWindowを使い、独自のポップアップメッセージを表示する方法をとりました。<br />
しかしながら、これってぶっちゃけConfirmメッセージじゃないよね…！</p>
<p>というわけで今回はAjaxボタンで正真正銘(?)のConfirmメッセージを表示する方法をご紹介します。</p>
<p><!-- more --></p>
<h3>AjaxボタンでConfirmメッセージ</h3>
<p><em>&gt;Ajaxで中身を入れ替える以上、onclickアトリビュートをいじるのはややこしそうなので&#8230;</em></p>
<p>と前回書いたのですが、<br />
「confirmで確認後、OKだったら既存AjaxのJavaScriptを実行してあげて、キャンセルだったらfalseを返す」<br />
ようなJavaScriptを書けば問題ないんじゃ…？と思いまして。</p>
<p>そんなわけでさらっとサンプルを書いてみました。<br />
サンプルは前回同様、ボタンを押した時に確認メッセージを表示し、OKだったらカウントする、キャンセルだったら何もしない、といった仕様です。</p>
<p><span class="strong">Confirm2.java</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p181214"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code" id="p1812code14"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Confirm2 <span style="color: #000000; font-weight: bold;">extends</span> WebPage<span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a> result<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> Confirm2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add<span style="color: #009900;">&#40;</span>result <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;result&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #339933;">&lt;</span>Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		result.<span style="color: #006633;">setOutputMarkupId</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Form<span style="color: #339933;">&lt;?&gt;</span> form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #339933;">&lt;</span>Confirm2<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AjaxButton<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;count&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> Model<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;カウントしますか？&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span>AjaxRequestTarget target, Form<span style="color: #339933;">&lt;?&gt;</span> form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				count<span style="color: #339933;">++;</span>
				target.<span style="color: #006633;">addComponent</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">protected</span> IAjaxCallDecorator getAjaxCallDecorator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> AjaxPreprocessingCallDecorator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">getAjaxCallDecorator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
					@Override
					<span style="color: #000000; font-weight: bold;">public</span> CharSequence preDecorateScript<span style="color: #009900;">&#40;</span>CharSequence script<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;if(!confirm('&quot;</span> <span style="color: #339933;">+</span> getModelObject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;')) return false;&quot;</span> <span style="color: #339933;">+</span> script<span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">25～34行目付近</span>:<br />
AjaxButtonのgetAjaxCallDecoratorをオーバライドしてあげることで、出力されるAjax用JavaScriptに手を加えています。</p>
<p>実際に出力されるhtmlは以下のようになります。</p>
<pre lang="Html" line="none">
onclick="if(!confirm('カウントしますか？')) return false;var wcall=wicketSubmitFormById('form2', ';[長いので略]"
</pre>
<h4>まとめ</h4>
<p>というわけで、AjaxButtonでも前回みたいな似非確認ダイアログではなくちゃんとした(?)Confirmメッセージを出すことができました。<br />
AjaxButtonを記述する度にgetAjaxCallDecorator()をオーバライドするのも面倒なので、AjaxButtonを継承したサブクラスを作っておくのが便利そうです。</p>
<h3>動作環境</h3>
<p>今回のサンプルソースは以下の環境で動作させています。</p>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th style="text-align:left">JDK</th>
<td>1.6.0_13</td>
</tr>
<tr>
<th style="text-align:left">Apache Tomcat</th>
<td>6.0.16</td>
</tr>
<tr>
<th style="text-align:left">Apache Wicket</th>
<td>1.4.0</td>
</tr>
</table>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html">Wicket小話その1. とりあえずWicketを始めよう</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/wicket_02_confirm.html">Wicket小話その2. Wicketで確認メッセージを出すにはどうすればよいのか？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/09/wicket_03_confirm02.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/09/wicket_03_confirm02.html" />
	</item>
		<item>
		<title>ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その２）</title>
		<link>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html#comments</comments>
		<pubDate>Tue, 08 Sep 2009 03:40:48 +0000</pubDate>
		<dc:creator>笹山 昭秀</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ext.grid.GridPanel]]></category>
		<category><![CDATA[Ext.override]]></category>
		<category><![CDATA[Ext.ux.data.PagingMemoryProxy]]></category>
		<category><![CDATA[Ext.ux.ProgressBarPager]]></category>
		<category><![CDATA[Ext.ux.SlidingPager]]></category>
		<category><![CDATA[ExtJS3.0]]></category>
		<category><![CDATA[オーバーライド]]></category>
		<category><![CDATA[ツールチップ]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1429</guid>
		<description><![CDATA[
このエントリーは下記の記事の続きです。
ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）

こんにちは。笹山です。
前回Ext.grid.GridPanelを用いてシンプルな時刻表を作成しました。
まだまだ物足りないので機能を追加していきます。
せっかくなのでExtJS3.0の新機能を用いてもっとリッチにしていこうと思います。
（前回のGridは実際のところExtJS3.0でなくても作成できます。）
今回は以下の機能追加を行います。

ページング機能を追加する
Gridの高さを自由に変更可能にする
Gridの各Cellにマウスを合わせた時、内容をツールチップに表示する

※今回は全便の時刻表データを使ってサンプルを作成します（8月時刻表全便データ）

新機能ライブラリの追加
ExtJS3.0のサンプルサイトで紹介されている新機能を使用するには、新機能用のライブラリが必要です。
新機能用のライブラリは、ExtJS3.0を展開したexmaple\uxフォルダ以下にあります。（新機能なのに何でexampleフォルダなんだろう？）
必要なファイルは以下になります。

ext-3.0.0\examples\ux\ux-all.js
ext-3.0.0\examples\ux\css\ux-all.css
ext-3.0.0\examples\ux\images以下のファイル全て

前回作成したサンプルをもとに変更を加えていきます。

grid-timetable.htmlのHEADタグ内に「新機能に必要なファイル」と「全便の時刻表データファイル」を追加します
※override-paging-memory-proxy.jsについては新規作成します

1
2
3
4
  &#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; href=&#34;path/ux-all.css&#34; /&#62;
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/ux-all.js&#34;&#62;&#60;/script&#62;
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/timetable-data.js&#34;&#62;&#60;/script&#62;
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/override-paging-memory-proxy.js&#34;&#62;&#60;/script&#62;

※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください


grid-timetable.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;
&#34;http://www.w3.org/TR/html4/loose.dtd&#34;&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;
    &#60;head&#62;
        &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34; /&#62;
        &#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; href=&#34;path/ext-all.css&#34; [...]]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーは下記の記事の続きです。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）</a>
</div>
<p>こんにちは。笹山です。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">前回</a>Ext.grid.GridPanelを用いてシンプルな時刻表を作成しました。</p>
<p>まだまだ物足りないので機能を追加していきます。<br />
せっかくなのでExtJS3.0の新機能を用いてもっとリッチにしていこうと思います。<br />
（<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">前回</a>のGridは実際のところExtJS3.0でなくても作成できます。）</p>
<p>今回は以下の機能追加を行います。</p>
<ul>
<li>ページング機能を追加する</li>
<li>Gridの高さを自由に変更可能にする</li>
<li>Gridの各Cellにマウスを合わせた時、内容をツールチップに表示する</li>
</ul>
<p>※今回は全便の時刻表データを使ってサンプルを作成します（<a href="http://blog.eni.co.jp/tech/misc/extjs/data/timetable-data.js">8月時刻表全便データ</a>）</p>
<p><span id="more-1429"></span></p>
<h3>新機能ライブラリの追加</h3>
<p>ExtJS3.0のサンプルサイトで紹介されている新機能を使用するには、新機能用のライブラリが必要です。<br />
新機能用のライブラリは、ExtJS3.0を展開したexmaple\uxフォルダ以下にあります。（新機能なのに何でexampleフォルダなんだろう？）</p>
<p>必要なファイルは以下になります。</p>
<ul>
<li>ext-3.0.0\examples\ux\ux-all.js</li>
<li>ext-3.0.0\examples\ux\css\ux-all.css</li>
<li>ext-3.0.0\examples\ux\images以下のファイル全て</li>
</ul>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">前回</a>作成したサンプルをもとに変更を加えていきます。</p>
<ul>
<li>grid-timetable.htmlのHEADタグ内に「新機能に必要なファイル」と「全便の時刻表データファイル」を追加します<br />
<span style="color: #ff0000;">※</span><a href="#override-paging-memory-proxy">override-paging-memory-proxy.jsについては新規作成します</a></p>

<div class="wp_codebox"><table width="100%" ><tr id="p142922"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p1429code22"><pre class="html" style="font-family:monospace;">  &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;path/ux-all.css&quot; /&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;path/ux-all.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;path/timetable-data.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;path/override-paging-memory-proxy.js&quot;&gt;&lt;/script&gt;</pre></td></tr></table></div>

<p><span style="color: #ff0000;">※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください</span></li>
</ul>
<ul>
<li>grid-timetable.html</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142923"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p1429code23"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;
&quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;path/ext-all.css&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;path/ux-all.css&quot; /&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-base.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-all.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ux-all.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-lang-ja.js&quot; charset=&quot;UTF-8&quot;&gt;&lt;/script&gt;
&nbsp;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/timetable-data.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;path/override-paging-memory-proxy.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/grid-timetable.js&quot;&gt;&lt;/script&gt;
        &lt;title&gt;伊丹空港 8月時刻表&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;伊丹空港 8月時刻表&lt;/h1&gt;
        &lt;div id=&quot;grid-timetable&quot;&gt;&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p><a name="override-paging-memory-proxy"></a></p>
<h3>Ext.ux.data.PagingMemoryProxyのメソッドオーバーライド</h3>
<p>Ext.ux.data.PagingMemoryProxyを利用したサンプルを作成している際に以下のバグを発見しました。</p>
<ul>
<li>Gridのカラムソートの昇順、降順が逆に処理される</li>
<li>Gridのカラムソートの降順が正常に動作しない（最後のデータから表示しているだけ）</li>
</ul>
<p>これを修正するためにExt.ux.data.PagingMemoryProxyのdoRequest メソッドのオーバーライドを行います。<br />
エディタで新しいファイルoverride-paging-memory-proxy.jsを作成します。</p>
<ul>
<li>override-paging-memory-proxy.js(新規作成)</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142924"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</pre></td><td class="code" id="p1429code24"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">override</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">PagingMemoryProxy</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>
    doRequest<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>action<span style="color: #339933;">,</span> rs<span style="color: #339933;">,</span> params<span style="color: #339933;">,</span> reader<span style="color: #339933;">,</span> callback<span style="color: #339933;">,</span> scope<span style="color: #339933;">,</span> options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        params <span style="color: #339933;">=</span> params <span style="color: #339933;">||</span>
        <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> result<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            result <span style="color: #339933;">=</span> reader.<span style="color: #660066;">readRecords</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">fireEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'loadexception'</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> options<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>scope<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> options<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// filtering</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span> <span style="color: #339933;">!==</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result.<span style="color: #660066;">records</span> <span style="color: #339933;">=</span> result.<span style="color: #660066;">records</span>.<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'object'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> att <span style="color: #339933;">=</span> params.<span style="color: #660066;">filterCol</span> <span style="color: #339933;">||</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> String<span style="color: #009900;">&#40;</span>el.<span style="color: #660066;">data</span><span style="color: #009900;">&#91;</span>att<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> String<span style="color: #009900;">&#40;</span>el<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">totalRecords</span> <span style="color: #339933;">=</span> result.<span style="color: #660066;">records</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// sorting</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">sort</span> <span style="color: #339933;">!==</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// use integer as params.sort to specify column, since arrays are not named</span>
            <span style="color: #006600; font-style: italic;">// params.sort=0; would also match a array without columns</span>
            <span style="color: #003366; font-weight: bold;">var</span> dir <span style="color: #339933;">=</span> String<span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">dir</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'DESC'</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span>1 <span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> fn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>r1<span style="color: #339933;">,</span> r2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">return</span> r1 <span style="color: #339933;">==</span> r2 <span style="color: #339933;">?</span> 0 <span style="color: #339933;">:</span> r1 <span style="color: #339933;">&lt;</span> r2 <span style="color: #339933;">?</span> <span style="color: #339933;">-</span>1 <span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
　　　　　　　　<span style="color: #006600; font-style: italic;">/* ↑↑↑↑↑↑↑↑↑↑↑↑ ※ux-all.jsでは、 return r1 &lt; r2; になっています */</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">records</span>.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #003366; font-weight: bold;">var</span> v <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'object'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    v <span style="color: #339933;">=</span> fn<span style="color: #009900;">&#40;</span>a.<span style="color: #660066;">data</span><span style="color: #009900;">&#91;</span>params.<span style="color: #660066;">sort</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> b.<span style="color: #660066;">data</span><span style="color: #009900;">&#91;</span>params.<span style="color: #660066;">sort</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> dir<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                    v <span style="color: #339933;">=</span> fn<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> dir<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    v <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>a.<span style="color: #660066;">index</span> <span style="color: #339933;">&lt;</span> b.<span style="color: #660066;">index</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span>1 <span style="color: #339933;">:</span> 1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">return</span> v<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// paging (use undefined cause start can also be 0 (thus false))</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">start</span> <span style="color: #339933;">!==</span> undefined <span style="color: #339933;">&amp;&amp;</span> params.<span style="color: #660066;">limit</span> <span style="color: #339933;">!==</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result.<span style="color: #660066;">records</span> <span style="color: #339933;">=</span> result.<span style="color: #660066;">records</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">start</span><span style="color: #339933;">,</span> params.<span style="color: #660066;">start</span> <span style="color: #339933;">+</span> params.<span style="color: #660066;">limit</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>scope<span style="color: #339933;">,</span> result<span style="color: #339933;">,</span> options<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext<strong/></caption>
<tr>
<th width="150">
            Methods
        </th>
<th>
            説明
        </th>
</tr>
<tr>
<td>
            override
        </td>
<td>
既存クラスのメソッドをオーバーライドします<br />メソッドが存在しない場合は追加されます
        </td>
</tr>
</table>
<p>作成したoverride-paging-memory-proxy.jsをgrid-timetable.htmlに追加してください。</p>
<h3>ページング機能を追加する</h3>
<p><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">前回</a>はExt.data.ArrayStoreを使用して配列をそのままStoreに渡していましたが、今回はExt.data.Storeのproxyを使用してデータを取得します。<br />
Storeはproxyを使用して外部データを取得します。proxyにはJSON形式でデータを取得するHttpProxyやメモリ内のデータを取得するためのExt.data.MemoryProxyがあります。<br />
今回使用するExt.ux.data.PagingMemoryProxyはExt.data.MemoryProxyが拡張されたものでメモリ内のデータのページングやソートを行うことができます。</p>
<p>それでは、<a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">前回</a>のgrid-timetable.jsにページング機能を追加してきます。</p>
<ul>
<li>「全便の時刻表データファイル」を使用しますので、ソース中に直接書いていたtimeTableData配列を削除します</li>
<li>（変更①） StoreをExt.data.ArrayStoreからExt.data.Storeへ変更しproxyからデータを取得するようにします</li>
<li>（変更②） Ext.grid.GridPanelのBottomToolbarにExt.PagingToolbarを作成します</li>
<li>（変更③） Storeへロードを行う際に、HTTPパラメータを指定してデータをロードします</li>
</ul>
<p />
<ul>
<li>grid-timetable.js</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142925"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
</pre></td><td class="code" id="p1429code25"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Store</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>                                <span style="color: #009966; font-style: italic;">/* 変更① ここから */</span>
        proxy<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">PagingMemoryProxy</span><span style="color: #009900;">&#40;</span>timeTableData<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        remoteSort<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        baseParams<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>sort<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span> dir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ASC'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
        reader<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">ArrayReader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            fields<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'model'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'type'</span><span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>                                                          <span style="color: #009966; font-style: italic;">/* 変更① ここまで */</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'時刻表'</span><span style="color: #339933;">,</span>
        frame<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        height<span style="color: #339933;">:</span> <span style="color: #CC0000;">350</span><span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> <span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>
        renderTo<span style="color: #339933;">:</span> <span style="color: #3366CC;">'grid-timetable'</span><span style="color: #339933;">,</span>
        stripeRows<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        trackMouseOver<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
        columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'航空会社'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span> params<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> airlineColor <span style="color: #339933;">=</span> v<span style="color: #339933;">;</span>
                    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #3366CC;">'ANA'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #003399;&quot;&gt;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #3366CC;">'JAL'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #cc0000;&quot;&gt;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #3366CC;">'IBEX'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #F552A8;&quot;&gt;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #003366; font-weight: bold;">var</span> codeShare <span style="color: #339933;">=</span> v.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>codeShare.<span style="color: #660066;">length</span> <span style="color: #339933;">==</span> 2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>codeShare<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'IBEX'</span> <span style="color: #339933;">&amp;&amp;</span> codeShare<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'ANA'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #F552A8;&quot;&gt;'</span> <span style="color: #339933;">+</span> 
                                    codeShare<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'/'</span> <span style="color: #339933;">+</span> 
                                    <span style="color: #3366CC;">'&lt;span style=&quot;color: #003399;&quot;&gt;'</span> <span style="color: #339933;">+</span> codeShare<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                            <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                                <span style="color: #006600; font-style: italic;">// 何もしない</span>
                            <span style="color: #009900;">&#125;</span>
                        <span style="color: #009900;">&#125;</span>
                    <span style="color: #009900;">&#125;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> airlineColor<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'便名'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'機種'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'model'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'伊丹空港時間'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> Ext.<span style="color: #660066;">util</span>.<span style="color: #660066;">Format</span>.<span style="color: #660066;">dateRenderer</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'H:i'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港時間'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> Ext.<span style="color: #660066;">util</span>.<span style="color: #660066;">Format</span>.<span style="color: #660066;">dateRenderer</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'H:i'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'出発/到着種別'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'type'</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        bbar<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>                            <span style="color: #009966; font-style: italic;">/* 変更② ここから */</span>
            pageSize<span style="color: #339933;">:</span> 30<span style="color: #339933;">,</span>
            store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
            displayInfo<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>                                                        <span style="color: #009966; font-style: italic;">/* 変更② ここまで */</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    store.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>                                                 <span style="color: #009966; font-style: italic;">/* 変更③ ここから */</span>
        params<span style="color: #339933;">:</span><span style="color: #009900;">&#123;</span>
            start<span style="color: #339933;">:</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>
            limit<span style="color: #339933;">:</span><span style="color: #CC0000;">30</span><span style="color: #339933;">,</span>
            sort<span style="color: #339933;">:</span><span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
            dir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ASC'</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                                          <span style="color: #009966; font-style: italic;">/* 変更③ ここまで */</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<ul>
<li>変更①　2行目～17行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.data.Store<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	proxy
        </td>
<td colspan="2">
        	データオブジェクトへのアクセスを提供するプロキシーオブジェクトを指定します
        </td>
</tr>
<tr>
<td>
        	remoteSort
        </td>
<td colspan="2">
        	true：並び替えをproxyに要求して処理します<br />
                false：キャッシュ中のデータ（現在Grid表示されているデータ）で並び替えを行います
        </td>
</tr>
<tr>
<td rowspan="4">
        	baseParams
        </td>
<td colspan="2">
HTTP リクエスト時に常に送られるパラメータのオブジェクトです<br />
Ext.ux.data.PagingMemoryProxyではstart,limit,sort,dir,filterのパラメータを受け取り、処理が可能です<br />
start,limitパラメータはbaseParamsを指定しなくてもページング処理の際、自動で設定されます
        </td>
</tr>
<tr>
<th width="100">
        	パラメータ
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	sort
        </td>
<td>
ソートする項目名を指定します
        </td>
</tr>
<tr>
<td>
        	dir
        </td>
<td>
ソートする方向を指定します
        </td>
</tr>
<tr>
<td>
        	reader
        </td>
<td colspan="2">
DataReader オブジェクトを指定します
        </td>
</tr>
</table>
<p></p>
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.ux.data.PagingMemoryProxy<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	-
        </td>
<td colspan="2">
ページンググリッドが可能なMemoryProxyです（メモリ内のデータから読み込みます）
        </td>
</tr>
</table>
<p></p>
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.data.ArrayReader<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td rowspan="4">
        	fields
        </td>
<td colspan="2">
データをどのようにマッピングするか定義します
        </td>
</tr>
<tr>
<th width="100">
        	パラメータ
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	name
        </td>
<td>
レコード内でfieldを参照する際に用いるnameです<br /> ColumnModelのdataIndexプロパティによって参照されます
        </td>
</tr>
<tr>
<td>
        	type
        </td>
<td>
表示できる値に変換するためのデータタイプです<br />指定しない場合は、autoとなり変換を行いません
        </td>
</tr>
</table>
</li>
<li>変更②　89行目～93行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.grid.GridPanel<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	bbar
        </td>
<td colspan="2">
Gridパネル下部のツールバーです
        </td>
</tr>
</table>
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.PagingToolbar<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	pageSize
        </td>
<td colspan="2">
1ページ単位で表示するデータの数です
        </td>
</tr>
<tr>
<td>
        	store
        </td>
<td colspan="2">
ページングツールバーがデータソースとして使用するExt.data.Storeを指定します
        </td>
</tr>
<tr>
<td>
        	displayInfo
        </td>
<td colspan="2">
displayMsg(ページングステータスメッセージ)を表示します
        </td>
</tr>
</table>
</li>
<li>変更③　96行目～103行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.grid.GridPanel<strong/></caption>
<tr>
<th width="150">
        	Methods
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td rowspan="4">
        	load
        </td>
<td colspan="2">
設定されたReaderを用いてProxyからレコードキャッシュをロードします
        </td>
</tr>
<tr>
<th width="100">
        	Options
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
params
        </td>
<td>
リモートデータソースに対してHTTPパラメータとして渡すプロパティを指定します<br />
Ext.ux.data.PagingMemoryProxyでは以下のパラメータを受け取り、処理が可能です<br />
start:データ開始位置<br />
limit:1ページ当たりのデータ件数<br />
sort:ソートする項目名<br />
dir:ソートする方向
        </td>
</tr>
</table>
</li>
</ul>
<p />
<div id="attachment_1647" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging-300x141.png" alt="Grid(時刻表)ページング機能" title="ページング機能" width="300" height="141" class="size-medium wp-image-1647" /></a><p class="wp-caption-text">Grid(時刻表)ページング機能</p></div></p>
<p>たったこれだけの変更でページング機能が実現できます。今回はメモリ内のデータでページング機能を行いました。proxyをExt.data.HttpProxyに変更すれば、サーバからXML、JSON形式でデータを取得してこれを実現することが可能です。</p>
<h3>ページング機能を拡張する</h3>
<p>ExtJS3.0の新しい機能でページングの機能を簡単に便利に、カッコ良くできます。</p>
<ul>
<li>（拡張①）スライドでページング可能にする</li>
<li>（拡張②）プログレスバーで進捗確認、ページング可能にする</li>
</ul>
<ul>
<li>grid-timetable.js</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142926"><td class="line_numbers"><pre>19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p1429code26"><pre class="javascript" style="font-family:monospace;">    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span>
&nbsp;
        bbar<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            pageSize<span style="color: #339933;">:</span> 30<span style="color: #339933;">,</span>
            store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
            displayInfo<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
            plugins<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">SlidingPager</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>          <span style="color: #009966; font-style: italic;">/* 拡張① */</span>
                <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">ProgressBarPager</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>       <span style="color: #009966; font-style: italic;">/* 拡張② */</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span></pre></td></tr></table></div>

<div id="attachment_1665" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging_plugin.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging_plugin-300x141.png" alt="Grid(時刻表)ページング機能拡張（SlidingPager,ProgressBarPager）" title="Grid(時刻表)ページング機能拡張（SlidingPager,ProgressBarPager）" width="300" height="141" class="size-medium wp-image-1665" /></a><p class="wp-caption-text">Grid(時刻表)ページング機能拡張（SlidingPager,ProgressBarPager）</p></div>
<p>たったこれだけです。<br />
Ext.PagingToolbarのpluginsオプションに指定するだけで簡単に実現できます。</p>
<h3>Gridの高さを任意のサイズに変更可能にする</h3>
<p>ここまでのGrid(時刻表)高さは固定でした。<br />
データがサイズ内に収まらない場合は、スクロールして見る必要がありました。<br />
そこでGrid(時刻表)の高さを任意のサイズに変更できるようにします。</p>
<ul>
<li>（拡張③）Grid(時刻表)の高さを任意のサイズに変更可能にする</li>
</ul>
<ul>
<li>grid-timetable.js</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142927"><td class="line_numbers"><pre>19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code" id="p1429code27"><pre class="javascript" style="font-family:monospace;">    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span>
&nbsp;
        plugins<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">PanelResizer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>  <span style="color: #009966; font-style: italic;">/* 拡張③ ここから */</span>
            minHeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span>
            maxHeight<span style="color: #339933;">:</span> <span style="color: #CC0000;">800</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>                                <span style="color: #009966; font-style: italic;">/* 拡張③ ここまで */</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span></pre></td></tr></table></div>

<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.ux.PanelResizer<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	minHeight
        </td>
<td>
        変更可能最小サイズ(pixel)
        </td>
</tr>
<tr>
<td>
        	maxHeight
        </td>
<td>
        変更可能最大サイズ(pixel)
        </td>
</tr>
</table>
<p />
<div id="attachment_1669" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging_frame_size.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_paging_frame_size-300x178.png" alt="Grid(時刻表)高さ変更" title="Grid(時刻表)高さ変更" width="300" height="178" class="size-medium wp-image-1669" /></a><p class="wp-caption-text">Grid(時刻表)高さ変更</p></div></p>
<p>Ext.grid.GridPanelのpluginsオプションに指定するだけでこれも簡単に実現できます。</p>
<h3>GridのCell内容をツールチップに表示する</h3>
<p>今回のGrid(時刻表)では問題ないですが、文字列が長すぎてCell内に収まりきらない場合があります。<br />
そのようなときのために、GridのCell上でマウスオーバしたときにツールチップを表示させてみます。</p>
<ul>
<li>（拡張④）GridのCell内容をツールチップに表示する</li>
</ul>
<ul>
<li>grid-timetable.js</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p142928"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code" id="p1429code28"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">QuickTips</span>.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                        <span style="color: #009966; font-style: italic;">/* 拡張④ */</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span>
&nbsp;
        columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span> params<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                 <span style="color: #009966; font-style: italic;">/* 拡張④ ここから */</span>
                    params.<span style="color: #660066;">attr</span> <span style="color: #339933;">=</span> 
                         <span style="color: #3366CC;">'ext:qtitle=&quot;対象空港&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">' ext:qwidth=&quot;100&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">' ext:qtip=&quot;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;'</span><span style="color: #339933;">;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> v<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>                                               <span style="color: #009966; font-style: italic;">/* 拡張④ ここから */</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
               <span style="color: #006600; font-style: italic;">// ～省略</span></pre></td></tr></table></div>

<ul>
<li>拡張④ 3行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.QuickTips<strong/></caption>
<tr>
<th width="150">
            Methods
        </th>
<th>
            説明
        </th>
</tr>
<tr>
<td>
            init
        </td>
<td>
全体のQuickTipsのインタフェースを初期化し、QuckTipsを使用可能にします。
        </td>
</tr>
</table>
</li>
<li>拡張④ 16行目～20行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.grid.GridPanel<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	renderer
        </td>
<td>
        	セルの与えられたデータ値にHTMLマークアップを生成するために使用される関数です
        </td>
</tr>
</table>
<p>rendererに使用する無名関数function(v, params)で以下のHTML属性を追加することでツールチップ表示が可能になります。</p>
<table class="content" width="100%">
<tr>
<th width="150">
        	属性
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
ext:qtitle
        </td>
<td>
ツールチップのタイトルです
        </td>
</tr>
<tr>
<td>
ext:qwidth
        </td>
<td>
ツールチップの幅(pixel)です
        </td>
</tr>
<tr>
<td>
ext:qtip
        </td>
<td>
ツールチップで表示する内容です
        </td>
</tr>
</table>
<p>※一般的なHTMLタグに直接上記属性を指定することもできます。
</li>
</ul>
<div id="attachment_1696" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_qtip.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/itm_timetable_qtip-300x140.png" alt="Grid(時刻表)ツールチップ表示" title="Grid(時刻表)ツールチップ表示" width="300" height="140" class="size-medium wp-image-1696" /></a><p class="wp-caption-text">Grid(時刻表)ツールチップ表示</p></div>
<p>これも簡単に実現できてしまいました。<br />
一般的なHTMLタグにも属性指定して簡単にツールチップを表示できるなんて素敵です。</p>
<h3>最後に</h3>
<p>だいぶん時刻表がカッコ良くなってきました。<br />
ほとんどコードを書くことなく機能が実現できて感動しました。<br />
次回ももう少し時刻表に機能を追加していこうと思っています。<br />
お楽しみに！</p>
<p><a href="http://blog.eni.co.jp/tech/misc/extjs/part2/grid-timetable.html">ExtJS3.0 Gridデモ　「伊丹空港　8月時刻表（全便）　その２」　</a></p>
<h3>参考リンク</h3>
<ul>
<li><a href="http://extjs.com/">Ext</a></li>
<li><a href="http://extjs.co.jp/">Ext Japan</a></li>
<li><a href="http://extjs.com/deploy/dev/examples/samples.html">ExtJS3.0 Samples &#038; Demos</a></li>
<li><a href="http://extjs.com/deploy/dev/docs/">ExtJS API Documentation</a></li>
</ul>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html" />
	</item>
		<item>
		<title>Wicket小話その2. Wicketで確認メッセージを出すにはどうすればよいのか？</title>
		<link>http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html#comments</comments>
		<pubDate>Fri, 04 Sep 2009 02:35:23 +0000</pubDate>
		<dc:creator>武輪 恭代</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1365</guid>
		<description><![CDATA[ども、武輪です。
Webアプリケーションでは、データを登録したり編集したり削除したりといった操作が日常茶飯事です。
そして「削除ボタンを押した時にいきなり削除するのではなく、confirmメッセージを出す」というのはよくあるパターンですね。
さてWicket小話その2では、「Wicketで確認メッセージを出すにはどうすればよいのか？」について、実際のコードを踏まえて試してみようと思います。

非Ajaxボタンの場合
例えばこんなボタンがあるとします。

これはcountボタンを押すと画面上に何回クリックしたのかを表示する簡単なサンプルです。
Confirm.html

1
2
3
4
5
6
7
8
9
10
11
12
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;
&#60;head&#62;
	&#60;title&#62;Wicket Examples - confirm&#60;/title&#62;
&#60;/head&#62;
&#60;body&#62;
	&#60;span wicket:id=&#34;result&#34; /&#62; 回目
	&#60;form wicket:id=&#34;form&#34;&#62;
		&#60;input wicket:id=&#34;count&#34; type=&#34;submit&#34; value=&#34;count&#34; /&#62;
	&#60;/form&#62;
&#60;/body&#62;
&#60;/html&#62;

Confirm.java(非AjaxButton編)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Confirm extends WebPage &#123;
&#160;
	private int count = 0;
&#160;
	/**
	 * コンストラクタ
	 */
	public Confirm&#40;&#41; &#123;
		add&#40;new Label&#40;&#34;result&#34;, new PropertyModel&#60;Integer&#62;&#40;this, &#34;count&#34;&#41;&#41;&#41;;
		Form&#60;?&#62; form = new Form&#60;Confirm&#62;&#40;&#34;form&#34;&#41;;
		Button countButton;
		form.add&#40;countButton = new Button&#40;&#34;count&#34;&#41; &#123;
			private static final long serialVersionUID = 1L;
&#160;
			@Override
			public void onSubmit&#40;&#41; &#123;
				super.onSubmit&#40;&#41;;
				count++;
			&#125;
&#160;
		&#125;&#41;;
		add&#40;form&#41;;
	&#125;
&#160;
	/**
	 * countを取得します。
	 * @return [...]]]></description>
			<content:encoded><![CDATA[<p>ども、武輪です。</p>
<p>Webアプリケーションでは、データを登録したり編集したり削除したりといった操作が日常茶飯事です。<br />
そして「削除ボタンを押した時にいきなり削除するのではなく、confirmメッセージを出す」というのはよくあるパターンですね。</p>
<p>さてWicket小話その2では、「Wicketで確認メッセージを出すにはどうすればよいのか？」について、実際のコードを踏まえて試してみようと思います。</p>
<p><span id="more-1365"></span></p>
<h3>非Ajaxボタンの場合</h3>
<p>例えばこんなボタンがあるとします。<br />
<img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/sample011-300x214.png" alt="confirmサンプル" title="confirmサンプル" width="300" height="214" class="alignleft size-medium wp-image-1728" /><br clear="all"/><br />
これはcountボタンを押すと画面上に何回クリックしたのかを表示する簡単なサンプルです。</p>
<p><span class="strong">Confirm.html</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136541"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p1365code41"><pre class="html" style="font-family:monospace;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
	&lt;title&gt;Wicket Examples - confirm&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;span wicket:id=&quot;result&quot; /&gt; 回目
	&lt;form wicket:id=&quot;form&quot;&gt;
		&lt;input wicket:id=&quot;count&quot; type=&quot;submit&quot; value=&quot;count&quot; /&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p><span class="strong">Confirm.java(非AjaxButton編)</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136542"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code" id="p1365code42"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Confirm <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> Confirm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;result&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #339933;">&lt;</span>Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Form<span style="color: #339933;">&lt;?&gt;</span> form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #339933;">&lt;</span>Confirm<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> countButton<span style="color: #339933;">;</span>
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>countButton <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onSubmit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				count<span style="color: #339933;">++;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * countを取得します。
	 * @return count
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> count<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>html側で対応</h4>
<p>html側に直接JavaScriptを埋め込むことで対応。<br />
Javaのコードには一切変更点はありません。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p136543"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p1365code43"><pre class="html" style="font-family:monospace;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
	&lt;title&gt;Wicket Examples - confirm&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;span wicket:id=&quot;result&quot; /&gt; 回目
	&lt;form wicket:id=&quot;form&quot;&gt;
		&lt;input wicket:id=&quot;count&quot; type=&quot;submit&quot; value=&quot;count&quot; onclick=&quot;return confirm('カウントしますか？')&quot; /&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">9行目</span>:<br />
onclickイベントを追加しただけです。</p>
<h4>Java側で対応</h4>
<p>SimpleAttributeModifierを使うことで、任意のアトリビュートを付加することができます。<br />
htmlには一切変更点はありません。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p136544"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p1365code44"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Confirm <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> Confirm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;result&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #339933;">&lt;</span>Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Form<span style="color: #339933;">&lt;?&gt;</span> form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #339933;">&lt;</span>Confirm<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> countButton<span style="color: #339933;">;</span>
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>countButton <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onSubmit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				count<span style="color: #339933;">++;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		countButton.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SimpleAttributeModifier<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;onclick&quot;</span>, <span style="color: #0000ff;">&quot;return confirm('カウントしますか？')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * countを取得します。
	 * @return count
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> count<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">22行目</span>:<br />
countButtonにSimpleAttributeModifierをadd。</p>
<p>html側で対応した場合も、Java側で対応した場合も、動作的には下図のように、countボタンをクリックすると確認ダイアログが表示されます。<br />
確認ダイアログのOKをクリックすれば、数字がインクリメントされ、キャンセルをクリックすれば数字は元のままです。<br />
<img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/sample02-300x215.png" alt="Confirmサンプル" title="Confirmサンプル" width="300" height="215" class="alignleft size-medium wp-image-1733" /><br clear="all"/></p>
<p><br clear="all"/></p>
<h3>Ajaxボタンの場合</h3>
<p>続きましてAjaxボタンの場合。<br />
動作的には変わらないのですが、先ほどのサンプルコードを下記のように、ButtonではなくAjaxButtonを使用するように変更します。<br />
html側には変更はありません。(Wicketってこういうとこ便利ですよね)</p>
<p><span class="strong">Confirm.java(AjaxButton編)</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136545"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code" id="p1365code45"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Confirm <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> Confirm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a> result<span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>result <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;result&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #339933;">&lt;</span>Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		result.<span style="color: #006633;">setOutputMarkupId</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Form<span style="color: #339933;">&lt;?&gt;</span> form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #339933;">&lt;</span>Confirm<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		AjaxButton countButton<span style="color: #339933;">;</span>
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>countButton <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AjaxButton<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span>AjaxRequestTarget target, Form<span style="color: #339933;">&lt;?&gt;</span> form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				count<span style="color: #339933;">++;</span>
				target.<span style="color: #006633;">addComponent</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * countを取得します。
	 * @return count
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> count<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">11行目</span>:<br />
Ajaxを用いてコンポーネントを更新する場合は、setOutputMarkupIdをtrueにすることを忘れずに！</p>
<h4>こんな失敗</h4>
<p>非Ajaxボタンの時と同じように、onclickアトリビュート追加してやればいいんじゃないの？<br />
　↓<br />
html側に「onclick=&#8221;return confirm(&#8217;カウントしますか？&#8217;)&#8221;」をつけたしてみる。<br />
　↓<br />
カウントはされるが、確認ダイアログは出てこない。あれ？<br />
　↓<br />
生成されたhtmlソースを見てみる<br />
　↓</p>

<div class="wp_codebox"><table width="100%" ><tr id="p136546"><td class="code" id="p1365code46"><pre class="html" style="font-family:monospace;">&lt;input type=&quot;submit&quot; value=&quot;count&quot; onclick=&quot;var wcall=wicketSubmitFormById('ida', '?wicket:interface=:5:form:count::IActivePageBehaviorListener:0:&amp;amp;wicket:ignoreIfNotActive=true', 'count' ,null,null, function() {return Wicket.$$(this)&amp;amp;&amp;amp;Wicket.$$('ida')}.bind(this));;; return false;&quot; name=&quot;count&quot; id=&quot;idb&quot;/&gt;</pre></td></tr></table></div>

<p>　↓<br />
Ajax用のonclickになってるよーorz<br />
　↓<br />
じゃあ、SimpleAttributeModifierを使うパターンは？<br />
　↓<br />
確認ダイアログは出るけど、OKクリックしてもカウントアップされない<br />
　↓<br />
生成されたhtmlソースを見てみる<br />
　↓</p>

<div class="wp_codebox"><table width="100%" ><tr id="p136547"><td class="code" id="p1365code47"><pre class="html" style="font-family:monospace;">&lt;input type=&quot;submit&quot; value=&quot;count&quot; name=&quot;count&quot; id=&quot;id3&quot; onclick=&quot;return confirm('カウントしますか？')&quot;/&gt;</pre></td></tr></table></div>

<p>　↓<br />
見事Ajax用のonclickイベントはconfirmに置き換わってる<br />
　↓<br />
そりゃそうだorz</p>
<h4>力技で解決</h4>
<p>Ajaxで中身を入れ替える以上、onclickアトリビュートをいじるのはややこしそうなので、とっても強引に解決してみました。</p>
<p>もう独自にConfirmウィンドウ実装しちゃえばいいんじゃね？<br />
というわけで、できたのがこんな画面。</p>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/09/sample03-300x205.png" alt="Confirmサンプル" title="Confirmサンプル" width="300" height="205" class="alignleft size-medium wp-image-1746" /><br clear="all"/></p>
<p>Wicket-extensionにはいくつかの便利なAjaxコンポーネントが備わっています。<br />
そのうちの一つであるModalWindowを使って、強引に確認ダイアログのようなものを表示させてみました。</p>
<p>追加したのは下記3ファイル(ConfirmModalWindowPage.html、ConfirmModalWindowPage.java、IConfirmPage.java)。</p>
<p><span class="strong">ConfirmModalWondowPage.html</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136548"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code" id="p1365code48"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;content-type&quot; content=&quot;application/xhtml+xml;charset=UTF-8&quot; /&gt;
	&lt;title&gt;ModalWindow&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div wicket:id=&quot;info&quot;&gt;メッセージ&lt;/div&gt;
	&lt;form wicket:id=&quot;confirmForm&quot;&gt;
		&lt;div style=&quot;padding:1em; text-align:center&quot;&gt;
			&lt;input type=&quot;submit&quot; wicket:id=&quot;ok&quot; value=&quot;OK&quot; /&gt;
			&lt;input type=&quot;submit&quot; wicket:id=&quot;cancel&quot; value=&quot;キャンセル&quot; /&gt;
		&lt;/div&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p><span class="strong">ConfirmModalWondowPage.java</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136549"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
</pre></td><td class="code" id="p1365code49"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ConfirmModalWindowPage <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #009900;">&#123;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> ConfirmModalWindowPage<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> IConfirmPage page, <span style="color: #000000; font-weight: bold;">final</span> ModalWindow confirmModalWindow, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> info<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;info&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> Model<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span>info<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		Form confirmForm<span style="color: #339933;">;</span>
		add<span style="color: #009900;">&#40;</span>confirmForm <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;confirmForm&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// OKボタン</span>
		confirmForm.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AjaxButton<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ok&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
			@Override
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span>AjaxRequestTarget target, Form<span style="color: #339933;">&lt;?&gt;</span> form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">boolean</span> result <span style="color: #339933;">=</span> page.<span style="color: #006633;">ok</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// 処理に成功した時の動作</span>
					confirmModalWindow.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// 処理に失敗した時の動作</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// キャンセルボタン</span>
		confirmForm.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AjaxButton<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;cancel&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
			@Override
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span>AjaxRequestTarget target, Form<span style="color: #339933;">&lt;?&gt;</span> form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// キャンセルボタンが押されたときの処理</span>
				confirmModalWindow.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 確認用ModalWindowを取得する.
	 * @param id
	 * @param page
	 * @return
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> ModalWindow getConfirmModalWindow<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> id, <span style="color: #000000; font-weight: bold;">final</span> IConfirmPage page, <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> info<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">final</span> ModalWindow modal <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ModalWindow<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setCssClassName</span><span style="color: #009900;">&#40;</span>ModalWindow.<span style="color: #006633;">CSS_CLASS_GRAY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setInitialHeight</span><span style="color: #009900;">&#40;</span>150<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setInitialWidth</span><span style="color: #009900;">&#40;</span>350<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setResizable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;確認メッセージ&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setCookieName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;confirm_window&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		modal.<span style="color: #006633;">setPageCreator</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ModalWindow.<span style="color: #006633;">PageCreator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">public</span> Page createPage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ConfirmModalWindowPage<span style="color: #009900;">&#40;</span>page, modal, info<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		modal.<span style="color: #006633;">setWindowClosedCallback</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ModalWindow.<span style="color: #006633;">WindowClosedCallback</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClose<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				page.<span style="color: #006633;">refleshComponent</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		modal.<span style="color: #006633;">setCloseButtonCallback</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ModalWindow.<span style="color: #006633;">CloseButtonCallback</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> onCloseButtonClicked<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> modal<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">11～23行目</span>:<br />
ConfirmウィンドウのOKボタンの定義です。実際の処理は、元のPageのokメソッドに記述しています。<br />
処理の成功/失敗を返すようにしておくと、処理に失敗した場合はConfirmウィンドウ内にエラーメッセージを表示するなんて使い方もできそうです。</p>
<p><span class="blue">26～33行目</span>:<br />
Confirmウィンドウのキャンセルボタンの定義です。Confirmウィンドウを閉じているだけです。</p>
<p><span class="blue">43～73行目</span>:<br />
Confirmウィンドウ用のModalWindowを取得するメソッドです。元のPageから取得するためstaticメソッドにしています。</p>
<p><span class="blue">45～51行目</span>:<br />
ModalWindowの設定です。<br />
　setCssClassName　→　CSS_CLASS_GRAYかCSS_CLASS_BLUEを選択。デフォルトでは青色。<br />
　setInitialHeight、setInitialWidth　→　ModalWindowのサイズ指定。確認ダイアログなので小さめにしておきます。<br />
　setResizable　→　ModalWindowのリサイズを可能にするかしないか。<br />
　setTitle　→　ModalWindowのタイトル文字列。<br />
　setCookieName　→　クッキーの名前。このクッキーはModalWindowの位置などを記憶しています。</p>
<p><span class="blue">58～63行目</span>:<br />
ModalWindowが閉じられたときの処理を記述します。<br />
ここでは元画面のコンポーネントの更新を行っています。</p>
<p><span class="blue">65～70行目</span>:<br />
ModalWindowの×ボタンで閉じられたときの処理を記述します。<br />
ここでは特に何も行っていません。</p>
<p><span class="strong">IConfirmPage.java</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136550"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p1365code50"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> IConfirmPage <span style="color: #009900;">&#123;</span>
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 画面の更新
	 * @param target
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> refleshComponent<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * OKボタンを押した時の処理
	 * @param target
	 * @return 処理が成功したかどうか true:成功 false:失敗
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> ok<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * キャンセルボタンを押した時の処理
	 * @param target
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> cancel<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
Confirmウィンドウを表示するPageでこのインターフェースを実装します。</p>
<p>このインターフェースを実装するようにConfirm.javaを以下のように修正しました。<br />
<span class="strong">Confirm.java(修正後)</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136551"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
</pre></td><td class="code" id="p1365code51"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Confirm <span style="color: #000000; font-weight: bold;">extends</span> WebPage <span style="color: #000000; font-weight: bold;">implements</span> IConfirmPage<span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a> result<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> Confirm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add<span style="color: #009900;">&#40;</span>result <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alabel+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Label</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;result&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> PropertyModel<span style="color: #339933;">&lt;</span>Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		result.<span style="color: #006633;">setOutputMarkupId</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Form<span style="color: #339933;">&lt;?&gt;</span> form <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Form<span style="color: #339933;">&lt;</span>Confirm<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">final</span> ModalWindow confirmModalWindow <span style="color: #339933;">=</span> ConfirmModalWindowPage.<span style="color: #006633;">getConfirmModalWindow</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;confirmModalWindow&quot;</span>,
				Confirm.<span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;カウントしますか？&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>confirmModalWindow<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		AjaxButton countButton<span style="color: #339933;">;</span>
		form.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>countButton <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AjaxButton<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;count&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
			@Override
			<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onSubmit<span style="color: #009900;">&#40;</span>AjaxRequestTarget target, Form<span style="color: #339933;">&lt;?&gt;</span> form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				confirmModalWindow.<span style="color: #006633;">show</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		add<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * countを取得します。
	 * @return count
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> count<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Confirmウィンドウでキャンセルが押されたときの処理
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> cancel<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// キャンセル時の処理</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * ConfirmウィンドウでOKが押されたときの処理
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> ok<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		count<span style="color: #339933;">++;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 画面上のコンポーネントの更新
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> refleshComponent<span style="color: #009900;">&#40;</span>AjaxRequestTarget target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		target.<span style="color: #006633;">addComponent</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">14～16行目</span>:<br />
Confirmウィンドウ用のModalWindowを取得します。</p>
<p><span class="blue">23～25行目</span>:<br />
countボタンがクリックされたときの処理。ModalWindowを表示します。</p>
<p><span class="blue">40～45行目</span>:<br />
Confirmウィンドウでキャンセルボタンを押されたときの実処理を記述します。ここでは特に何もしていません。</p>
<p><span class="blue">50～53行目</span>:<br />
ConfirmウィンドでOKボタンが押されたときの実処理を記述します。ここではcountをインクリメントしています。</p>
<p><span class="blue">58～60行目</span>:<br />
Ajaxで画面の更新を行います。ここではresultラベルの表示を更新しています。</p>
<p><span class="strong">Confirm.html(変更後)</span></p>

<div class="wp_codebox"><table width="100%" ><tr id="p136552"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code" id="p1365code52"><pre class="html" style="font-family:monospace;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
	&lt;title&gt;Wicket Examples - confirm&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;span wicket:id=&quot;result&quot; /&gt; 回目
	&lt;form wicket:id=&quot;form&quot;&gt;
		&lt;input wicket:id=&quot;count&quot; type=&quot;submit&quot; value=&quot;count&quot;/&gt;
		&lt;div wicket:id=&quot;confirmModalWindow&quot;&gt;削除ConfirmModalWindow&lt;/div&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>【メモ】<br />
<span class="blue">10行目</span>:<br />
Confirmウィンドウ表示領域の確保。</p>
<h4>まとめ</h4>
<p>とりあえずこんな感じの実装で、AjaxButtonの場合でも確認ダイアログっぽいものは出すことができました。</p>
<p>もっともこのままだと、1つの画面でOK、キャンセルが押されたときの処理が1つしか記述できないので、実際汎用的に使おうと思えば、さらなる改造が必要ですけどね:）</p>
<h3>動作環境</h3>
<p>今回のサンプルソースは以下の環境で動作させています。</p>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th style="text-align:left">JDK</th>
<td>1.6.0_13</td>
</tr>
<tr>
<th style="text-align:left">Apache Tomcat</th>
<td>6.0.16</td>
</tr>
<tr>
<th style="text-align:left">Apache Wicket</th>
<td>1.4.0</td>
</tr>
</table>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html">Wicket小話その1. とりあえずWicketを始めよう</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/09/wicket_03_confirm02.html">Wicket小話その3. Wicketで確認メッセージを出すにはどうすればよいのか？(その2) </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html" />
	</item>
		<item>
		<title>ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その１）</title>
		<link>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 01:14:34 +0000</pubDate>
		<dc:creator>笹山 昭秀</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ext.grid.GridPanel]]></category>
		<category><![CDATA[ExtJS3.0]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1190</guid>
		<description><![CDATA[こんにちは。笹山です。
WebアプリケーションでDBなどからデータを取得して一覧表示させる方法は、HTMLのTABLEタグで書かれたものが多いと思います。
もちろんスタイルシートを駆使すればカッコよくはなるのでしょうが、今回はこれをもう少し手軽にリッチにしようとExtJSを使ってみました。
余談ですが今回のExtJSサンプルは、私自身の趣味のために作成しました。
趣味でよく伊丹空港に飛行機を撮影に行きます。エアーバンドで便名を聞いて、その飛行機が
「どこ行き？どこから来た？機種は何？」
というのが知りたいことがよくあります。（私だけか？）
これから数回に渡り、ExtJSで伊丹空港の8月の時刻表を私好みにしていこうと思います。

ExtJSとは
インターネットで検索すればすぐに分かると思いますので簡単に紹介します。
まず、ExtJSとは、リッチなWEBアプリケーション開発のためのJavaScriptライブラリです。
コンポーネントも揃っており、拡張も簡単にできます。
また、ドキュメントやサンプルも揃っていますので、比較的簡単にリッチなUIが実現できます。
一般的なテーブル
時刻表をHTMLのTABLEタグで作成するとこんな感じでしょうか。



対象空港
航空会社
便名
機種
伊丹空港時間
対象空港時間
出発/到着種別


札幌（千歳）
JAL
3911
B6
8:00
9:50
Departure


札幌（千歳）
JAL
2001
B7
8:35
10:25
Departure


札幌（千歳）
ANA
771
B6
8:55
10:45
Departure


札幌（千歳）
ANA
775
A32
11:45
13:35
Departure


札幌（千歳）
ANA
777
B6
14:15
16:05
Departure


札幌（千歳）
JAL
2019
CRJ
18:30
20:20
Departure


札幌（千歳）
JAL
2000
CRJ
10:25
8:30
Arrival


札幌（千歳）
JAL
3912
CRJ
13:00
11:05
Arrival


札幌（千歳）
ANA
774
B6
14:15
12:25
Arrival


札幌（千歳）
ANA
776
A32
16:00
14:10
Arrival


札幌（千歳）
JAL
2016
B7
19:25
17:30
Arrival


札幌（千歳）
ANA
778
B6
19:30
17:40
Arrival



一覧の表示だけで何もできません。
例えば、時間の降順に一覧を表示したい場合、プログラムでデータをSortし、その結果で一覧を作成し直す必要があります。
一覧のカラム順番を変えたい場合（例えば、出発/到着種別カラムを一番前のカラムにしたい）、一覧表示後はカラム順番を変えることはできません。
ExtJSを使うと簡単に実現できてしまいます。
ExtJSのインストール

ExtJS3.0をダウンロードして適当な場所に展開します
ExtJSに必要なファイルは以下になります

ext-3.0.0/resources/css/ext-all.css （ExtJSのスタイルシート）
ext-3.0.0/adapter/ext/ext-base.js （ExtJSのcore utilitiesとfunctions）
ext-3.0.0/ext-all.js （ExtJSの全ての機能）
ext-3.0.0/src/locale/ext-lang-ja.js （ExtJSのリソースを日本語化）


ExtJSを使用するHTML（以降grid-timetable.htmlとします）のHEADタグ内に必要なファイルを指定します

1
2
3
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/ext-base.js&#34;&#62;&#60;/script&#62;
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/ext-all.js&#34;&#62;&#60;/script&#62;
  &#60;script type=&#34;text/javascript&#34; src=&#34;path/ext-lang-ja.js&#34; charset=&#34;UTF-8&#34;&#62;&#60;/script&#62;

※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください

これでExtJSが使用できるようになります。
Ext.grid.GridPanelで時刻表を作成
先ほどのgrid-timetable.htmlに以下を追加します

HEADタグ内にSCRIPTタグを追加して今回ExtJSで作成する外部ファイル（以降 grid-timetable.jsとします）を指定します
BODYタグ内に、DIVタグを追加してidにgrid-timetableを指定し、時刻表を配置する場所を指定します


grid-timetable.html（※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください）


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;
&#34;http://www.w3.org/TR/html4/loose.dtd&#34;&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;
    &#60;head&#62;
        &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34; /&#62;
        &#60;link [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。笹山です。</p>
<p>WebアプリケーションでDBなどからデータを取得して一覧表示させる方法は、HTMLのTABLEタグで書かれたものが多いと思います。<br />
もちろんスタイルシートを駆使すればカッコよくはなるのでしょうが、今回はこれをもう少し手軽にリッチにしようとExtJSを使ってみました。</p>
<p>余談ですが今回のExtJSサンプルは、私自身の趣味のために作成しました。<br />
趣味でよく伊丹空港に飛行機を撮影に行きます。エアーバンドで便名を聞いて、その飛行機が<br />
「どこ行き？どこから来た？機種は何？」<br />
というのが知りたいことがよくあります。（私だけか？）<br />
これから数回に渡り、ExtJSで伊丹空港の8月の時刻表を私好みにしていこうと思います。</p>
<p><span id="more-1190"></span></p>
<h3>ExtJSとは</h3>
<p>インターネットで検索すればすぐに分かると思いますので簡単に紹介します。<br />
まず、ExtJSとは、リッチなWEBアプリケーション開発のためのJavaScriptライブラリです。<br />
コンポーネントも揃っており、拡張も簡単にできます。<br />
また、ドキュメントやサンプルも揃っていますので、比較的簡単にリッチなUIが実現できます。</p>
<h3>一般的なテーブル</h3>
<p>時刻表をHTMLのTABLEタグで作成するとこんな感じでしょうか。</p>
<table class="content" border="0">
<tbody>
<tr style="background-color: #deecfd;">
<th>対象空港</th>
<th>航空会社</th>
<th>便名</th>
<th>機種</th>
<th>伊丹空港時間</th>
<th>対象空港時間</th>
<th>出発/到着種別</th>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">3911</td>
<td style="text-align: center">B6</td>
<td style="text-align: center">8:00</td>
<td style="text-align: center">9:50</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">2001</td>
<td style="text-align: center">B7</td>
<td style="text-align: center">8:35</td>
<td style="text-align: center">10:25</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">771</td>
<td style="text-align: center">B6</td>
<td style="text-align: center">8:55</td>
<td style="text-align: center">10:45</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">775</td>
<td style="text-align: center">A32</td>
<td style="text-align: center">11:45</td>
<td style="text-align: center">13:35</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">777</td>
<td style="text-align: center">B6</td>
<td style="text-align: center">14:15</td>
<td style="text-align: center">16:05</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">2019</td>
<td style="text-align: center">CRJ</td>
<td style="text-align: center">18:30</td>
<td style="text-align: center">20:20</td>
<td style="text-align: center">Departure</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">2000</td>
<td style="text-align: center">CRJ</td>
<td style="text-align: center">10:25</td>
<td style="text-align: center">8:30</td>
<td style="text-align: center">Arrival</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">3912</td>
<td style="text-align: center">CRJ</td>
<td style="text-align: center">13:00</td>
<td style="text-align: center">11:05</td>
<td style="text-align: center">Arrival</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">774</td>
<td style="text-align: center">B6</td>
<td style="text-align: center">14:15</td>
<td style="text-align: center">12:25</td>
<td style="text-align: center">Arrival</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">776</td>
<td style="text-align: center">A32</td>
<td style="text-align: center">16:00</td>
<td style="text-align: center">14:10</td>
<td style="text-align: center">Arrival</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #cc0000;">JAL</span></td>
<td style="text-align: center">2016</td>
<td style="text-align: center">B7</td>
<td style="text-align: center">19:25</td>
<td style="text-align: center">17:30</td>
<td style="text-align: center">Arrival</td>
</tr>
<tr>
<td style="text-align: center">札幌（千歳）</td>
<td style="text-align: center"><span style="color: #003399;">ANA</span></td>
<td style="text-align: center">778</td>
<td style="text-align: center">B6</td>
<td style="text-align: center">19:30</td>
<td style="text-align: center">17:40</td>
<td style="text-align: center">Arrival</td>
</tr>
</tbody>
</table>
<p>一覧の表示だけで何もできません。<br />
例えば、時間の降順に一覧を表示したい場合、プログラムでデータをSortし、その結果で一覧を作成し直す必要があります。<br />
一覧のカラム順番を変えたい場合（例えば、出発/到着種別カラムを一番前のカラムにしたい）、一覧表示後はカラム順番を変えることはできません。</p>
<p>ExtJSを使うと簡単に実現できてしまいます。</p>
<h3>ExtJSのインストール</h3>
<ol>
<li><a href="http://extjs.com/products/extjs/download.php">ExtJS3.0をダウンロード</a>して適当な場所に展開します</li>
<li>ExtJSに必要なファイルは以下になります
<ul>
<li>ext-3.0.0/resources/css/ext-all.css （ExtJSのスタイルシート）</li>
<li>ext-3.0.0/adapter/ext/ext-base.js （ExtJSのcore utilitiesとfunctions）</li>
<li>ext-3.0.0/ext-all.js （ExtJSの全ての機能）</li>
<li>ext-3.0.0/src/locale/ext-lang-ja.js （ExtJSのリソースを日本語化）</li>
</ul>
</li>
<li>ExtJSを使用するHTML（以降grid-timetable.htmlとします）のHEADタグ内に必要なファイルを指定します

<div class="wp_codebox"><table width="100%" ><tr id="p119057"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1190code57"><pre class="html" style="font-family:monospace;">  &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-base.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-all.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-lang-ja.js&quot; charset=&quot;UTF-8&quot;&gt;&lt;/script&gt;</pre></td></tr></table></div>

<p><span style="color: #ff0000;">※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください</span></li>
</ol>
<p>これでExtJSが使用できるようになります。</p>
<h3>Ext.grid.GridPanelで時刻表を作成</h3>
<p>先ほどのgrid-timetable.htmlに以下を追加します</p>
<ol>
<li>HEADタグ内にSCRIPTタグを追加して今回ExtJSで作成する外部ファイル（以降 grid-timetable.jsとします）を指定します</li>
<li>BODYタグ内に、DIVタグを追加してidにgrid-timetableを指定し、時刻表を配置する場所を指定します</li>
</ol>
<ul>
<li>grid-timetable.html<span style="color: #ff0000;">（※linkタグ、scriptタグ中の「path」 : ファイルを配置したディレクトリ名に変更してください）</span></li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p119058"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p1190code58"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;
&quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;path/ext-all.css&quot; /&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-base.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-all.js&quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/ext-lang-ja.js&quot; charset=&quot;UTF-8&quot;&gt;&lt;/script&gt;
&nbsp;
        &lt;script type=&quot;text/javascript&quot; src=&quot;path/grid-timetable.js&quot;&gt;&lt;/script&gt;
        &lt;title&gt;伊丹空港 8月時刻表&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;伊丹空港 8月時刻表&lt;/h1&gt;
        &lt;div id=&quot;grid-timetable&quot;&gt;&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<table class="content">
<tr>
<th>
        	行番号
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	11行目
        </td>
<td>
        	ExtJSで作成する外部ファイルを指定します
        </td>
</tr>
<tr>
<td>
        	16行目
        </td>
<td>
        	時刻表を配置する場所を指定します
        </td>
</tr>
</table>
<p>　<br />
</p>
<ul>
<li>grid-timetable.js</li>
</ul>

<div class="wp_codebox"><table width="100%" ><tr id="p119059"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
</pre></td><td class="code" id="p1190code59"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">onReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> timeTableData <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'3911'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 8:00:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 9:50:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2001'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B7'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 8:35:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 10:25:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'771'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 8:55:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 10:45:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'775'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'A32'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 11:45:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 13:35:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'777'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 14:15:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 16:05:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2019'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'CRJ'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 18:30:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 20:20:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Departure'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2000'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'CRJ'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 10:25:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 8:30:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'3912'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 13:00:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 11:05:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'774'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 14:15:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 12:25:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'776'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'A32'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 16:00:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 14:10:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'JAL'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2016'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B7'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 19:25:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 17:30:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'札幌（千歳）'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'ANA'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'778'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'B6'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 19:30:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'2009/08/01 17:40:00'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Arrival'</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">ArrayStore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        fields<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'model'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'type'</span><span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'時刻表'</span><span style="color: #339933;">,</span>
        height<span style="color: #339933;">:</span> 320<span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> 750<span style="color: #339933;">,</span>
        stripeRows<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        renderTo<span style="color: #339933;">:</span> <span style="color: #3366CC;">'grid-timetable'</span><span style="color: #339933;">,</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
        columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'航空会社'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'便名'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'機種'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'model'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'伊丹空港時間'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> Ext.<span style="color: #660066;">util</span>.<span style="color: #660066;">Format</span>.<span style="color: #660066;">dateRenderer</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'H:i'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港時間'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #339933;">,</span>
                renderer<span style="color: #339933;">:</span> Ext.<span style="color: #660066;">util</span>.<span style="color: #660066;">Format</span>.<span style="color: #660066;">dateRenderer</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'H:i'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'出発/到着種別'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'type'</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    store.<span style="color: #660066;">loadData</span><span style="color: #009900;">&#40;</span>timeTableData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<table class="content" width="100%">
<caption style="text-align: left; "><strong>Class Ext<strong/></caption>
<tr>
<th width="150">
        	Methods
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	onReady
        </td>
<td>
        	DOMが完全に読みこまれた後に自動的に呼び出され、参照したいページの要素が利用できるようになります
        </td>
</tr>
</table>
<p>　<br />
</p>
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Class Ext.data.ArrayStore（データを保持するためのデータストアを作成します ）<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td rowspan="4">
        	fields
        </td>
<td colspan="2">
        	データをどのようにマッピングするか定義します
        </td>
</tr>
<tr>
<th width="100">
        	パラメータ
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	name
        </td>
<td>
        	レコード内でfieldを参照する際に用いるnameです<br /> ColumnModelのdataIndexプロパティによって参照されます
        </td>
</tr>
<tr>
<td>
        	type
        </td>
<td>
        	表示できる値に変換するためのデータタイプです<br />指定しない場合は、autoとなり変換を行いません
        </td>
</tr>
<tr>
<th>
        	Methods
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	loadData
        </td>
<td colspan="2">
        	データをストアへロードします
        </td>
</tr>
</table>
<p>　<br />
</p>
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Class Ext.grid.GridPanel（Gridパネルを作成します ）<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
        	title
        </td>
<td colspan="2">
        	Gridパネルのタイトルです
        </td>
</tr>
<tr>
<td>
        	height
        </td>
<td colspan="2">
        	Gridパネルの高さ(pixel)です
        </td>
</tr>
<tr>
<td>
        	width
        </td>
<td colspan="2">
        	Gridパネルの幅(pixel)です
        </td>
</tr>
<tr>
<td>
        	stripeRows
        </td>
<td colspan="2">
        	行をストライプ表示します
        </td>
</tr>
<tr>
<td>
        	renderTo
        </td>
<td colspan="2">
        	存在するエレメントIDを指定して、コンテナエレメントへ描画します
        </td>
</tr>
<tr>
<td>
        	store
        </td>
<td colspan="2">
        	Gridがデータストアとして扱うストアを指定します
        </td>
</tr>
<tr>
<td rowspan="6">
        	columns
        </td>
<td colspan="2">
        	Gridが使うColumnModelを定義します
        </td>
</tr>
<tr>
<th width="100">
        	パラメータ
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	header
        </td>
<td>
        	ヘッダーテキストです
        </td>
</tr>
<tr>
<td>
        	sortable
        </td>
<td>
        	カラムソートを許可します
        </td>
</tr>
<tr>
<td>
        	dataIndex
        </td>
<td>
        	Gridのデータストアで定義したnameを指定します
        </td>
</tr>
<tr>
<td>
        	renderer
        </td>
<td>
        	セルの与えられたデータ値にHTMLマークアップを生成するために使用される関数です
        </td>
</tr>
</table>
<p>これをブラウザで表示すると、ソート、カラム移動、カラム幅の変更が可能な時刻表が表示されるはずです。<br />
今回はあらかじめ用意しておいた配列でExt.data.ArrayStoreを用いてGridを作成しました。DBからデータを取得してGridを作成するにはJSON形式でレスポンスを返し、Ext.data.JsonStoreを使用してGridを作成します。</p>
<div id="attachment_1377" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_sort.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_sort-300x128.png" alt="ExtJS Gridのカラムソート" title="ExtJS Gridのカラムソート" width="300" height="128" class="size-medium wp-image-1377" /></a><p class="wp-caption-text">ExtJS Gridのカラムソート</p></div><br /><div id="attachment_1378" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_clm_dragdrop.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_clm_dragdrop-300x129.png" alt="ExtJS Gridのカラム移動" title="ExtJS Gridのカラム移動" width="300" height="129" class="size-medium wp-image-1378" /></a><p class="wp-caption-text">ExtJS Gridのカラム移動</p></div>
<h3>もう少しリッチに</h3>
<p>「シンプルGrid」で今回のブログを終わろうと思いましたが、もう少しお付き合いください。</p>
<p>あと３点追加したいと思います。</p>
<ul>
<li>（追加機能①）　伊丹空港の時刻表なので伊丹空港時間で最初から昇順表示しておく</li>
<li>（追加機能②）　Gridへ自動的に行番号を振る</li>
<li>（追加機能③）　航空会社ごとに色づけして表示</li>
</ul>
<p>先ほどのgrid-timetable.jsに以下を追加してください。</p>
<ul>
<li>追加機能①　28行目～31行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.data.ArrayStore<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td rowspan="4">
        	sortInfo
        </td>
<td colspan="2">
        	ソート順序を指定します
        </td>
</tr>
<tr>
<th width="100">
        	パラメータ
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
        	field
        </td>
<td>
        	ソートを行う対象fieldを指定します
        </td>
</tr>
<tr>
<td>
        	direction
        </td>
<td>
        	ソート方向を指定します
        </td>
</tr>
</table>
</li>
<li>追加機能②　42行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.grid.RowNumberer<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th colspan="2">
        	説明
        </th>
</tr>
<tr>
<td>
－
        </td>
<td colspan="2">
        	自動的にGridに行番号を表示します
        </td>
</tr>
</table>
</li>
<li>追加機能③　52行目～62行目<br />
<table class="content" width="100%">
<caption style="text-align: left; "><strong>Ext.grid.GridPanel<strong/></caption>
<tr>
<th width="150">
        	Config Options
        </th>
<th>
        	説明
        </th>
</tr>
<tr>
<td>
renderer
        </td>
<td>
セルの与えられたデータ値にHTMLマークアップを生成するために使用される関数です<br />
			文字列を比較して文字色を変えています
        </td>
</tr>
</table>
</li>
</ul>
<p></p>

<div class="wp_codebox"><table width="100%" ><tr id="p119060"><td class="line_numbers"><pre>15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
</pre></td><td class="code" id="p1190code60"><pre class="javascript" style="font-family:monospace;">&nbsp;
   ～ 省略 ～
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">ArrayStore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        fields<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'flightName'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'model'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'objectTime'</span><span style="color: #339933;">,</span> type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'date'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'type'</span><span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        sortInfo<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>                              <span style="color: #009966; font-style: italic;">/* 追加機能 ① ここから */</span>
           field<span style="color: #339933;">:</span> <span style="color: #3366CC;">'itamiTime'</span><span style="color: #339933;">,</span>
           direction<span style="color: #339933;">:</span> <span style="color: #3366CC;">'ASC'</span>
        <span style="color: #009900;">&#125;</span>                                        <span style="color: #009966; font-style: italic;">/* 追加機能 ① ここまで */</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        title<span style="color: #339933;">:</span> <span style="color: #3366CC;">'時刻表'</span><span style="color: #339933;">,</span>
        height<span style="color: #339933;">:</span> 320<span style="color: #339933;">,</span>
        width<span style="color: #339933;">:</span> 750<span style="color: #339933;">,</span>
        stripeRows<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        renderTo<span style="color: #339933;">:</span> <span style="color: #3366CC;">'grid-timetable'</span><span style="color: #339933;">,</span>
        store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
        columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">RowNumberer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>         <span style="color: #009966; font-style: italic;">/* 追加機能 ② */</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'対象空港'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'destination'</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#123;</span>
                header<span style="color: #339933;">:</span> <span style="color: #3366CC;">'航空会社'</span><span style="color: #339933;">,</span>
                sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
                dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'airline'</span>
                renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>v<span style="color: #339933;">,</span> params<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  <span style="color: #009966; font-style: italic;">/* 追加機能 ③ ここから */</span>
                    <span style="color: #003366; font-weight: bold;">var</span> airlineColor <span style="color: #339933;">=</span> v<span style="color: #339933;">;</span>
                        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #3366CC;">'ANA'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                            airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #003399;&quot;&gt;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #3366CC;">'JAL'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                            airlineColor <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;span style=&quot;color: #cc0000;&quot;&gt;'</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
                            <span style="color: #006600; font-style: italic;">// 何もしない</span>
                        <span style="color: #009900;">&#125;</span>
                        <span style="color: #000066; font-weight: bold;">return</span> airlineColor<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>                                 <span style="color: #009966; font-style: italic;">/* 追加機能 ③ ここまで */</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
   ～ 省略 ～</pre></td></tr></table></div>

<div id="attachment_1404" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_no_col.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/itm_timetable_no_col-300x129.png" alt="時刻表 機能追加" title="時刻表 機能追加" width="300" height="129" class="size-medium wp-image-1404" /></a><p class="wp-caption-text">時刻表 機能追加</p></div>
<p><a href="http://blog.eni.co.jp/tech/misc/extjs/part1/grid-timetable.html">ExtJS3.0 Gridデモ　「伊丹空港　8月時刻表（全便）」</a></p>
<h3>最後に</h3>
<p>今回はExtJSのGridでシンプルな時刻表を作りました。<br />
難しいことをコーディングしなくても簡単に実現できることがお分かりいただけたと思います。<br />
次回もまだまだ機能追加していきます。お楽しみに！</p>
<h3>参考リンク</h3>
<ul>
<li><a href="http://extjs.com/">Ext</a></li>
<li><a href="http://extjs.co.jp/">Ext Japan</a></li>
<li><a href="http://extjs.com/deploy/dev/examples/samples.html">ExtJS3.0 Samples &#038; Demos</a></li>
<li><a href="http://extjs.com/deploy/dev/docs/">ExtJS API Documentation</a></li>
</ul>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part2.html">ExtJS3.0でWebアプリケーションのテーブルをリッチにしよう（その２）</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/09/extjs3_grid_table_part1.html" />
	</item>
		<item>
		<title>アンドロイダー育成日記 -Androidと仲良くなるには- その4</title>
		<link>http://blog.eni.co.jp/tech/2009/09/android_beginner_diary_04.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/09/android_beginner_diary_04.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 01:00:03 +0000</pubDate>
		<dc:creator>正木 恵二</dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[アンドロイド]]></category>
		<category><![CDATA[リンク集]]></category>
		<category><![CDATA[作業日誌]]></category>
		<category><![CDATA[初心者]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1214</guid>
		<description><![CDATA[
このエントリーは下記の記事の続きです。
アンドロイダー育成日記 -Androidと仲良くなるには- その3

こんにちは。正木です。
大事なコトを書きそびれていたのを思い出しましたので白状します。
当方、Android1.5 + Eclipse3.5 を使って開発してます。
技術がコンセプトのブログでこのような失態を犯していた事を、深くお詫び申し上げます
丸刈り……は しません。今年の3月に剃ったトコロなんで。
それでは、本文へど～ぞ～。

（※ 記事中の役立つ凡例 =&#62; ☆：役立つ外部リンク）
前回まで（～#39）
・第2弾アプリ（『天気予報アプリ』）の開発・実装を開始。
・第2弾アプリと前作とでは全く趣向が違うので、何がどうなるのかが見えていない。
・GPSまわりを調査し始めて、前回は終了。
#40
緯度経度から地名をはじき出すには『ジオコーディング』とやらが必要…なのだが、AndroidのAPIに標準で用意されているらしい。
（android.location.GeocoderクラスのインスタンスのgetFromLocationメソッドに緯度と経度を渡すと、地名等の情報を保持しているandroid.location.Addressクラスのインスタンスが取得できる。下記リンク先を参照の事。）
APIが標準で用意されているとは、なななんとココロ優しい。
というワケで、GPSまわりに関しての「ホンマに実装できんのか？」という不安は然程無くなった、のだが、障壁がもうひとつ。
『数時間おきのお天気情報』なんて、どこでダウンロードできんねや？
そんなコトまではGoogle先生のシラバスには載ってなかったか。
☆ジオコーディングとは 「アドレスマッチング」 (Geocoding)： &#8211; IT用語辞典バイナリ
☆GPSの緯度経度から住所へ変換 &#8211; 泥縄トラップ
#41
緯度経度（簡単に）取得できませ～ん。（←あの警察映画のように。）
LocationManagerクラスからgetCurrentLocationメソッドが消えとる。はぁ～？？
（↑Android1.5では既に実装されていない。）
#42
『ライフサイクル』について、このエントリが解かりやすいんでねーか？
☆Androidのド肝 » Activityのライフサイクル
#43
DDMSに「こーゆー経路を歩きますよ」という登録をすると、実際にその経路を歩きながらAndroid端末を操作するみたいな感じで、GPS機能が働いてくれるらしい。
KMLファイルとかGPXファイルみたいな、聞き慣れない拡張子のファイルがあれば実現可能。
（結局この機能は使ってはいないし、この記事を作成する頃はこの機能の使い方を知らない。）
開発環境を提供する側も、いろいろと考えてくれてはるんやなー。感謝感謝。
あと、素晴らしい翻訳を発見。
こういう実のある事が出来るスキルがあると締まっていいんだけど……省みれば、今の自分は「緩急」の『緩』しかない。どーしよ。
☆AndroidのDDMSの使用方法のドキュメントを翻訳しました &#8211; Android(アンドロイド)情報-ブリリアントサービス
☆GMAP2GPX: Google MapでGPXファイルとMioMap地点ファイル　（←このサイトでGPXファイルが作成できる）
#44
緯度と経度を固定指定したら、ひとまず地名が取得できた。（こちらを参考に。）
あとは、くだんのデバグツール（DDMS）を用いてGPSから緯度と経度を取得するのみ。
#45
う～ん…。KMLファイルをDDMSでどーのこーの。反応しーひんかったら意味ないやんか。
（「KMLファイルをDDMSに読み込ませて、DDMSのリストに出てきた位置情報をクリックしても、エミュレータ側では何の反応もしなかった」の意。結局はそもそも自分の実装にバグがあった。）
☆八角研究所 : Android DDMSでKMLから位置情報の取得方法
☆勉強会/GPS &#8211; 日本Androidの会（日本アンドロイドの会）
#46
Tech Blogの3本目の記事を入稿。
このTech Blogの記事（「アンドロイダー日記」シリーズ）用として、Twitter的な感じで簡単な一言メモを取っている。
そのメモで、本当に「一言」の時があるのだが、そっからの 後のせサクサク やらなんやらで、結局立派な文章になってしまう。
普段、そんなオシャベリでもないんだが…。
#47
お天気情報を、RSS形式かなんかで配信しているサイトを探す。
だが、そういうサイトは、少ないように感じる。
…のだけれども、しゃーないといえばしゃーない気もする。
天気予報にプロが居たりビジネスとして成立している手前、猫も杓子も無料では配信しないだろう。
とは言うものの、素人の予報など誰も期待していないから、そこはプロの意見が必要。
Androidケータイにカメラが付いてるからって空を映しても何もならないし、写真を解析してどーこーなど、そんな仕様を採用するはずもない。
はぁ～。
そんな絶望の中で、参考にできそうなサイトを3つ。
（一番下は、MacでのAndroidアプリ開発環境の構築方法に関してのエントリ。Macは触ったコトないがいつか役立ちそうだと思ったので、ここにリンクを。）
　
☆天気予報をRSSでお届けする「ひとくち予報 in Feed」
☆Japan Weather Forecasts
☆GPL天気予報（google plus livedoor 天気）
☆flashcast：フリーで働くITエンジニア集団のブログ: Android SDK 1.5をインストールしてみる
#48
他プラットフォームとの関係について、お言葉を紹介。
◎『美学のiPhone、実用主義のandroidという印象』（直下リンク先より引用）
☆android、三日目。androidを見直したアプリ &#8211; Keep Crazy;shi3zの日記
#49
「洗濯物たとむ」の「たとむ」ってどこの方言なんや？
「たとむ」って言い慣れてる言葉なんだけども、文字面はヘンやね。
☆たとむ とは(Weblio)
#50
やっぱ、技術系の記事ってば、丁寧に書いたらアクセス数は伸びるのかな？
下記リンク先の記事が丁寧に書かれているのでそう思った次第。
☆Google Androidで画面遷移 &#8211; yamashinaの日記
#51
☆画面遷移 &#124; テックファーム
☆ブラウザや地図、ストリートビューの基、Intentとは？ (2/3) &#8211; ＠IT
前者のリンク先より引用。
◎『Androidでは「スタック」という概念があり、Activity（画面）は遷移するたびにスタックへタスクが積まれていきます。』
これが、どう厄介になるんかな。
いまんとこは想像が付かないし、そもそも厄介になるかどうかもわからない。
ただ、気ぃ付けとかなダメなんだなー、と。
#52
◎画像とかのリソースファイルのファイル名に大文字が入っていたら、Androidではそのファイルを正しく読み込んでくれない。
#53
◎Androidアプリからインターネットに接続するときは、マニフェストファイルにパーミッションの宣言をする必要がある。
☆Androidアプリでインターネット接続する為に必要な設定（android.permission.INTERNET） &#8211; WillFeed
どうも『マニフェストファイルに宣言』が最も重要な規約の一つ、らしい。
#54
過日に実装した画面において、表示されている文字が小さすぎるか？と疑念に駆られたが…実機が手元にない。確認したくても出来ない。
結局、『実機をどう調達するか？』に頭をひねらす事もなく、自分のケータイで試してみた。
今回使用する“エセAndroid端末”は、docomoのSH-04A。
スマートフォンのようでスマートフォンでない、ベンベン、というような、所謂『ガラパゴス携帯』。
エミュレータのハードコピーを取って、エミュレータアプリの端末画面部分の箇所だけ切り取って、その画像ファイルをメールでエセAndroid端末に送る。
…割と見えるではないか。
不可はなさそうだが可も全くない、という感じ。
レイアウトに味気がなさすぎるからだが…これは端末のせいじゃないな。設計者の感覚の問題だぁ…悲しいかな。
Android端末（HT-03Aを思い浮かべた）の解像度は、QVGAかVGAでなく「ハーフVGA」なんだな。
SA-04Aの解像度はVGAだったはず…調べてみると「フルワイドVGA」ですって。
「フルワイドVGA」だの「VGA＋」だの「ハーフVGA」だの…どんなユーザの重箱の隅を突こうとしているのだ？
#55
VBさんは、Javaの列挙型の使い方がいまさらやっとわかってきた、だとさ☆
#56
解からない事だらけの状態で、それらをまんべんなく調査していってると [...]]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーは下記の記事の続きです。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">アンドロイダー育成日記 -Androidと仲良くなるには- その3</a></p>
</div>
<p>こんにちは。正木です。</p>
<p>大事なコトを書きそびれていたのを思い出しましたので白状します。</p>
<p>当方、Android1.5 + Eclipse3.5 を使って開発してます。</p>
<p>技術がコンセプトのブログでこのような失態を犯していた事を、深くお詫び申し上げます<(_ _)><br />
丸刈り……は しません。今年の3月に剃ったトコロなんで。</p>
<p>それでは、本文へど～ぞ～。<br />
<span id="more-1214"></span><br />
（※ 記事中の役立つ凡例 =&gt; ☆：役立つ外部リンク）</p>
<h4>前回まで（～#39）</h4>
<p>・第2弾アプリ（『天気予報アプリ』）の開発・実装を開始。<br />
・第2弾アプリと前作とでは全く趣向が違うので、何がどうなるのかが見えていない。<br />
・GPSまわりを調査し始めて、前回は終了。</p>
<h4>#40</h4>
<p>緯度経度から地名をはじき出すには『ジオコーディング』とやらが必要…なのだが、AndroidのAPIに標準で用意されているらしい。<br />
（android.location.GeocoderクラスのインスタンスのgetFromLocationメソッドに緯度と経度を渡すと、地名等の情報を保持しているandroid.location.Addressクラスのインスタンスが取得できる。下記リンク先を参照の事。）<br />
APIが標準で用意されているとは、なななんとココロ優しい。</p>
<p>というワケで、GPSまわりに関しての「ホンマに実装できんのか？」という不安は然程無くなった、のだが、障壁がもうひとつ。</p>
<p>『数時間おきのお天気情報』なんて、どこでダウンロードできんねや？<br />
そんなコトまではGoogle先生のシラバスには載ってなかったか。</p>
<p>☆<a href="http://www.sophia-it.com/content/ジオコーディング">ジオコーディングとは 「アドレスマッチング」 (Geocoding)： &#8211; IT用語辞典バイナリ</a><br />
☆<a href="http://d.hatena.ne.jp/oldfish/20081214/1229257066">GPSの緯度経度から住所へ変換 &#8211; 泥縄トラップ</a></p>
<h4>#41</h4>
<p>緯度経度（簡単に）取得できませ～ん。（←<a href="http://ja.wikipedia.org/wiki/踊る大捜査線_THE_MOVIE_2_レインボーブリッジを封鎖せよ!">あの警察映画</a>のように。）</p>
<p>LocationManagerクラスからgetCurrentLocationメソッドが消えとる。はぁ～？？<br />
（↑Android1.5では既に実装されていない。）</p>
<h4>#42</h4>
<p>『ライフサイクル』について、このエントリが解かりやすいんでねーか？</p>
<p>☆<a href="http://blog.haw.co.jp/android/?p=52">Androidのド肝 » Activityのライフサイクル</a></p>
<h4>#43</h4>
<p>DDMSに「こーゆー経路を歩きますよ」という登録をすると、実際にその経路を歩きながらAndroid端末を操作するみたいな感じで、GPS機能が働いてくれるらしい。<br />
KMLファイルとかGPXファイルみたいな、聞き慣れない拡張子のファイルがあれば実現可能。<br />
（結局この機能は使ってはいないし、この記事を作成する頃はこの機能の使い方を知らない。）</p>
<p>開発環境を提供する側も、いろいろと考えてくれてはるんやなー。感謝感謝。</p>
<p>あと、素晴らしい翻訳を発見。<br />
こういう実のある事が出来るスキルがあると締まっていいんだけど……省みれば、今の自分は「緩急」の『緩』しかない。どーしよ。</p>
<p>☆<a href="http://d.hatena.ne.jp/bs-android/20090203/1233675390">AndroidのDDMSの使用方法のドキュメントを翻訳しました &#8211; Android(アンドロイド)情報-ブリリアントサービス</a><br />
☆<a href="http://etrexer.web.infoseek.co.jp/googlemap/gmap2gpx/">GMAP2GPX: Google MapでGPXファイルとMioMap地点ファイル</a>　（←このサイトでGPXファイルが作成できる）</p>
<h4>#44</h4>
<p>緯度と経度を固定指定したら、ひとまず地名が取得できた。（<a href="http://d.hatena.ne.jp/oldfish/20081214/1229257066">こちら</a>を参考に。）<br />
あとは、くだんのデバグツール（DDMS）を用いてGPSから緯度と経度を取得するのみ。</p>
<h4>#45</h4>
<p>う～ん…。KMLファイルをDDMSでどーのこーの。反応しーひんかったら意味ないやんか。<br />
（「KMLファイルをDDMSに読み込ませて、DDMSのリストに出てきた位置情報をクリックしても、エミュレータ側では何の反応もしなかった」の意。結局はそもそも自分の実装にバグがあった。）</p>
<p>☆<a href="http://www.hakkaku.net/hakkaker_blog/20090727-556">八角研究所 : Android DDMSでKMLから位置情報の取得方法</a><br />
☆<a href="http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2FGPS">勉強会/GPS &#8211; 日本Androidの会（日本アンドロイドの会）</a></p>
<h4>#46</h4>
<p><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">Tech Blogの3本目</a>の記事を入稿。</p>
<p>このTech Blogの記事（「アンドロイダー日記」シリーズ）用として、<a href="http://twitter.com/">Twitter</a>的な感じで簡単な一言メモを取っている。<br />
そのメモで、本当に「一言」の時があるのだが、そっからの 後のせサクサク やらなんやらで、結局立派な文章になってしまう。</p>
<p>普段、そんなオシャベリでもないんだが…。</p>
<h4>#47</h4>
<p>お天気情報を、RSS形式かなんかで配信しているサイトを探す。</p>
<p>だが、そういうサイトは、少ないように感じる。</p>
<p>…のだけれども、しゃーないといえばしゃーない気もする。<br />
天気予報にプロが居たりビジネスとして成立している手前、猫も杓子も無料では配信しないだろう。<br />
とは言うものの、素人の予報など誰も期待していないから、そこはプロの意見が必要。<br />
Androidケータイにカメラが付いてるからって空を映しても何もならないし、写真を解析してどーこーなど、そんな仕様を採用するはずもない。</p>
<p>はぁ～。</p>
<p>そんな絶望の中で、参考にできそうなサイトを3つ。<br />
（一番下は、MacでのAndroidアプリ開発環境の構築方法に関してのエントリ。Macは触ったコトないがいつか役立ちそうだと思ったので、ここにリンクを。）<br />
　<br />
☆<a href="http://www.weathermap.co.jp/hitokuchi_rss/">天気予報をRSSでお届けする「ひとくち予報 in Feed」</a><br />
☆<a href="http://www.rssweather.com/dir/Asia/Japan">Japan Weather Forecasts</a><br />
☆<a href="http://bellks.com/google/">GPL天気予報（google plus livedoor 天気）</a><br />
☆<a href="http://blog.flashcast.jp/2009/05/android-sdk-15.html">flashcast：フリーで働くITエンジニア集団のブログ: Android SDK 1.5をインストールしてみる</a></p>
<h4>#48</h4>
<p>他プラットフォームとの関係について、お言葉を紹介。</p>
<p>◎『美学のiPhone、実用主義のandroidという印象』（直下リンク先より引用）<br />
☆<a href="http://d.hatena.ne.jp/shi3z/20090712/1247365501">android、三日目。androidを見直したアプリ &#8211; Keep Crazy;shi3zの日記</a></p>
<h4>#49</h4>
<p>「洗濯物たとむ」の「たとむ」ってどこの方言なんや？</p>
<p>「たとむ」って言い慣れてる言葉なんだけども、文字面はヘンやね。</p>
<p>☆<a href="http://www.weblio.jp/content/たとむ">たとむ とは(Weblio)</a></p>
<h4>#50</h4>
<p>やっぱ、技術系の記事ってば、丁寧に書いたらアクセス数は伸びるのかな？<br />
下記リンク先の記事が丁寧に書かれているのでそう思った次第。</p>
<p>☆<a href="http://d.hatena.ne.jp/yamashina/20090806/1249575250">Google Androidで画面遷移 &#8211; yamashinaの日記</a></p>
<h4>#51</h4>
<p>☆<a href="http://www.techfirm.co.jp/lab/android/transition.html">画面遷移 | テックファーム</a><br />
☆<a href="http://www.atmarkit.co.jp/fjava/rensai4/android03/android03_2.html">ブラウザや地図、ストリートビューの基、Intentとは？ (2/3) &#8211; ＠IT</a></p>
<p>前者のリンク先より引用。<br />
◎『Androidでは「スタック」という概念があり、Activity（画面）は遷移するたびにスタックへタスクが積まれていきます。』</p>
<p>これが、どう厄介になるんかな。<br />
いまんとこは想像が付かないし、そもそも厄介になるかどうかもわからない。<br />
ただ、気ぃ付けとかなダメなんだなー、と。</p>
<h4>#52</h4>
<p>◎画像とかのリソースファイルのファイル名に大文字が入っていたら、Androidではそのファイルを正しく読み込んでくれない。</p>
<h4>#53</h4>
<p>◎Androidアプリからインターネットに接続するときは、マニフェストファイルにパーミッションの宣言をする必要がある。<br />
☆<a href="http://feedyomi.blog32.fc2.com/blog-entry-181.html">Androidアプリでインターネット接続する為に必要な設定（android.permission.INTERNET） &#8211; WillFeed</a></p>
<p>どうも『マニフェストファイルに宣言』が最も重要な規約の一つ、らしい。</p>
<h4>#54</h4>
<p>過日に実装した画面において、表示されている文字が小さすぎるか？と疑念に駆られたが…実機が手元にない。確認したくても出来ない。</p>
<p>結局、『実機をどう調達するか？』に頭をひねらす事もなく、自分のケータイで試してみた。</p>
<p>今回使用する“エセAndroid端末”は、<a href="http://www.nttdocomo.co.jp/product/foma/pro/sh04a/">docomoのSH-04A</a>。<br />
スマートフォンのようでスマートフォンでない、ベンベン、というような、所謂『ガラパゴス携帯』。</p>
<p>エミュレータのハードコピーを取って、エミュレータアプリの端末画面部分の箇所だけ切り取って、その画像ファイルをメールでエセAndroid端末に送る。</p>
<p>…割と見えるではないか。</p>
<p>不可はなさそうだが可も全くない、という感じ。<br />
レイアウトに味気がなさすぎるからだが…これは端末のせいじゃないな。設計者の感覚の問題だぁ…悲しいかな。</p>
<p>Android端末（HT-03Aを思い浮かべた）の解像度は、QVGAかVGAでなく「ハーフVGA」なんだな。</p>
<p>SA-04Aの解像度はVGAだったはず…調べてみると「フルワイドVGA」ですって。</p>
<p>「フルワイドVGA」だの「VGA＋」だの「ハーフVGA」だの…どんなユーザの重箱の隅を突こうとしているのだ？</p>
<h4>#55</h4>
<p>VBさんは、Javaの列挙型の使い方がいまさらやっとわかってきた、だとさ☆</p>
<h4>#56</h4>
<p>解からない事だらけの状態で、それらをまんべんなく調査していってると </p>
<p>あっ!!!!!!!!!</p>
<p>と言う間に時間が無くなる。</p>
<p>というか、ここまで上手くいかないものなんて思ってなかった。</p>
<h4>#57</h4>
<p>今度は、Javaの『シリアライズ』とかいうのを憶えた。</p>
<p>もうね、勤勉さで言うと、私と二宮金次郎が双璧を成してるはず（誇張</p>
<h4>#58</h4>
<p>◎android.content.IntentクラスのインスタンスにputExtraメソッドで値を突っ込んだあと、遷移後の画面でintentを操作しようとしたとき、Extraに存在しないキーを参照しても例外にならない。ただ単にNullが返ってくるだけ。</p>
<p>例外になるもんだと思ってたから拍子抜け。<br />
例外にならないのがスタンダードなんかな。よくわからん。</p>
<h4>#59</h4>
<p>観てみたかった。</p>
<p>☆<a href="http://blog.haw.co.jp/android/?p=170">Androidのド肝 » 今村 謙之さんのAndroidの講演会に行ってきました。</a></p>
<h4>#60</h4>
<p>【GPSの電波から緯度経度を取得して、そっから住所を取得する】という一連の流れが実現できました。</p>
<p>やっとかぁ。3作業日ぐらいかかったっけ(?_?)</p>
<h4>次回予告</h4>
<p>次回も自作アプリ第2弾の実装の続きを綴ります。まだまだお付き合いください。<br />
ありがとうございました。</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">アンドロイダー育成日記 -Androidと仲良くなるには- その1</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">アンドロイダー育成日記 -Androidと仲良くなるには- その3</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/bought_android_ht-03a.html">Androidケータイ(HT-03A)買いました</a></li>
<li>アンドロイダー育成日記 -Androidと仲良くなるには- その4(本記事)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/09/android_beginner_diary_04.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/09/android_beginner_diary_04.html" />
	</item>
		<item>
		<title>Wicket小話その1. とりあえずWicketを始めよう</title>
		<link>http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html#comments</comments>
		<pubDate>Mon, 31 Aug 2009 08:35:02 +0000</pubDate>
		<dc:creator>武輪 恭代</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Wicket]]></category>
		<category><![CDATA[フレームワーク]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1108</guid>
		<description><![CDATA[ども、武輪です。
Wicket小話と題しまして、Wicket初心者の私がWicketを使ってみて、

これちょっと便利な機能だなー
こんなコンポーネントを使ってみたよ！
こんな実装やってみたよ！

などなど。
そんなちょっとしたメモ書きを徒然と残していこうと思います。
基本的に情報はWebと書籍「オープンソース徹底活用 WicketによるWebアプリケーション開発」(矢野勉さん著)から得ています。
あとはWicketのソースとか。
さてWicket小話その1として、「とりあえずWicketを始めよう」という副題で徒然と書いていきます。

はじめに
そもそもWicketって何よって方に簡単に。
Wicketとは、Webアプリケーションフレームワークの1つです。
HtmlとJavaでWebアプリケーションが作れちゃいます。
設定ファイルはほとんど必要ありません。(そりゃweb.xmlは必須ですけども)
2009年8月現在Wicketは1.4がリリースされています。
Wicket小話では特に注意書きがない限り、この最新リリースのWicket1.4で試したことを書いていこうと思います。
開発環境などは以下の通り。



バージョン


JDK
1.6.0_13


Apache Tomcat
6.0.16


Apache Wicket
1.4.0


さてここまで書いたところで、ショックな出来事が1つ。
ちょ…、Wicket1.4.1もう出てるじゃんorz
ま、まぁいっか。
準備
Apache Maven2 のインストール手順
Maven2を使うことで簡単にWicketプロジェクトを開始することができます。
(事前に1.5以上のJDKがインストールされている前提で話を進めていきます。)

1. ダウンロード
Apache Maven Projectより、アーカイブをダウンロードします。
私は2.1.0を使用していますが、2.2.1が既に出ているようです。


2. 環境変数の設定
適当なディレクトリ(MAVEN_HOME)にダウンロードしてきたアーカイブを展開してください。
環境変数PATHに%MAVEN_HOME%binを追加。
(環境変数はシステムのプロパティ→詳細設定→環境変数から変更できます。既存のPATHの値を消してしまわないように気を付けてください。)
※JAVA_HOMEを設定していないとMaven2は動かないので注意。


3. インストール確認
コマンドプロンプトでmvn &#8211;versionを実行することでインストールを確認することができます。

C:>mvn --version
Apache Maven 2.1.0 (r755702; 2009-03-19 04:10:27+0900)
Java version: 1.6.0_06
Java home: C:javajdk1.6.0_06jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"


早速Wicketを始めよう
Moven2のインストールが完了したら、早速Wicketを開始してみましょう。
サンプルアプリケーションを動かしてみよう！

1. ダウンロード
http://wicket.apache.org/ から1.4系のアーカイブをダウンロードしてきます。
適当なディレクトリでアーカイブを展開します。
libディレクトリにはwicketの各種ライブラリーの他に、サンプルアプリケーションのwar(wicket-examples-1.4.x.war)も入っています。
このwarファイルをローカルのTomcatのwebappディレクトリに放り込んでTomcatを再起動してあげれば、とりあえずサンプルを動かすことができるんですが、このwarにはソースが含まれていないので動作を見るだけになってしまいます。
折角なのでEclipseで作業できるようにしましょう。


2. Eclipseにインポート
コマンドプロンプト上で、srcディレクトリ以下のwicket-examplesに移動します。
mvn eclipse:eclipse -DdownloadSources=true を実行することでEclipse用の設定ファイルが生成されます。

%展開先のディレクトリ%apache-wicket-1.4.xsrcwicket-examples>mvn eclipse:eclipse -DdownloadSources=true

あとはEclipseで「インポート」→「既存プロジェクトをワークスペースへ」からインポートすればOK。


3. サンプルを動かしてみよう
wicket-examplesパッケージにはJettyというJAVAのWebサーバが同梱されているので、簡単にサンプルを動作させることができます。
org.apache.wicket.examples.StartExamplesクラスを実行すればJettyサーバが起動します。
そしたらあとは http://localhost:8080/wicket-examples/ にアクセスするだけでWicketのサンプルの数々を試すことができます。
勿論Tomcatで動かしても全然問題ありません。

新規プロジェクトのスタート

サンプルアプリケーションは、既に1つの完成されたアプリケーションです。
新規プロジェクトをスタートさせる時には、ブランクのプロジェクトがあれば便利だなーって思いませんか？
というわけでブランクプロジェクトの作り方です。

Maven2の使い方なんかわかんないよーって人にも簡単！
WicketのQuickStartのページからコマンドラインを作成することができます。
上記サイトにアクセスすると、こんな入力欄があります。
各入力欄の意味は、
　GroupId:　パッケージとして使用される
　ArtifactId:　プロジェクト名として使用される
　Version:　Wicketのバージョン
こんな感じです。
これらを入力していくと、勝手にCommand Line欄にコマンドが組み立てられていくって寸法です。なんて便利！
次にコマンドプロンプト上でプロジェクトを作成したいディレクトリに移動し、先ほど生成したコマンドラインをコピペして実行します。
(※Proxyの設定などはこちらを参考に。→Maven2のTipsを集めるwiki#固有の環境設定)

C:test>mvn archetype:create -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.4.1 -DgroupId=jp.co.eni.wicket -DartifactId=sample
[INFO] Scanning [...]]]></description>
			<content:encoded><![CDATA[<p>ども、武輪です。</p>
<p>Wicket小話と題しまして、Wicket初心者の私がWicketを使ってみて、</p>
<ul>
<li>これちょっと便利な機能だなー</li>
<li>こんなコンポーネントを使ってみたよ！</li>
<li>こんな実装やってみたよ！</li>
</ul>
<p>などなど。<br />
そんなちょっとしたメモ書きを徒然と残していこうと思います。</p>
<p>基本的に情報はWebと書籍「<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798022217/enieni-22/ref=nosim/" name="amazletlink" target="_blank">オープンソース徹底活用 WicketによるWebアプリケーション開発</a>」(矢野勉さん著)から得ています。<br />
あとはWicketのソースとか。</p>
<p>さてWicket小話その1として、「とりあえずWicketを始めよう」という副題で徒然と書いていきます。</p>
<p><span id="more-1108"></span></p>
<h3>はじめに</h3>
<p>そもそもWicketって何よって方に簡単に。<br />
<b>Wicketとは、Webアプリケーションフレームワークの1つです。</b><br />
HtmlとJavaでWebアプリケーションが作れちゃいます。<br />
設定ファイルはほとんど必要ありません。(そりゃweb.xmlは必須ですけども)</p>
<p>2009年8月現在Wicketは1.4がリリースされています。<br />
Wicket小話では特に注意書きがない限り、この最新リリースのWicket1.4で試したことを書いていこうと思います。</p>
<p>開発環境などは以下の通り。</p>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th style="text-align:left">JDK</th>
<td>1.6.0_13</td>
</tr>
<tr>
<th style="text-align:left">Apache Tomcat</th>
<td>6.0.16</td>
</tr>
<tr>
<th style="text-align:left">Apache Wicket</th>
<td>1.4.0</td>
</tr>
</table>
<p>さてここまで書いたところで、ショックな出来事が1つ。<br />
ちょ…、Wicket1.4.1もう出てるじゃんorz</p>
<p>ま、まぁいっか。</p>
<h3>準備</h3>
<h4>Apache Maven2 のインストール手順</h4>
<p>Maven2を使うことで簡単にWicketプロジェクトを開始することができます。<br />
(事前に1.5以上のJDKがインストールされている前提で話を進めていきます。)</p>
<p>
<span class="entry">1. ダウンロード</span><br />
<a href="http://maven.apache.org/download.html">Apache Maven Project</a>より、アーカイブをダウンロードします。<br />
私は2.1.0を使用していますが、2.2.1が既に出ているようです。
</p>
<p>
<span class="entry">2. 環境変数の設定</span><br />
適当なディレクトリ(MAVEN_HOME)にダウンロードしてきたアーカイブを展開してください。<br />
環境変数PATHに%MAVEN_HOME%binを追加。<br />
(環境変数はシステムのプロパティ→詳細設定→環境変数から変更できます。既存のPATHの値を消してしまわないように気を付けてください。)</p>
<p>※JAVA_HOMEを設定していないとMaven2は動かないので注意。
</p>
<p>
<span class="entry">3. インストール確認</span><br />
コマンドプロンプトでmvn &#8211;versionを実行することでインストールを確認することができます。</p>
<pre style="background-color:black; color:white">
C:>mvn --version
Apache Maven 2.1.0 (r755702; 2009-03-19 04:10:27+0900)
Java version: 1.6.0_06
Java home: C:javajdk1.6.0_06jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
</pre>
</p>
<h3>早速Wicketを始めよう</h3>
<p>Moven2のインストールが完了したら、早速Wicketを開始してみましょう。</p>
<h4>サンプルアプリケーションを動かしてみよう！</h4>
<p>
<span class="entry">1. ダウンロード</span><br />
<a href="http://wicket.apache.org/">http://wicket.apache.org/</a> から1.4系のアーカイブをダウンロードしてきます。</p>
<p>適当なディレクトリでアーカイブを展開します。<br />
libディレクトリにはwicketの各種ライブラリーの他に、サンプルアプリケーションのwar(wicket-examples-1.4.x.war)も入っています。<br />
このwarファイルをローカルのTomcatのwebappディレクトリに放り込んでTomcatを再起動してあげれば、とりあえずサンプルを動かすことができるんですが、このwarにはソースが含まれていないので動作を見るだけになってしまいます。<br />
折角なのでEclipseで作業できるようにしましょう。
</p>
<p>
<span class="entry">2. Eclipseにインポート</span><br />
コマンドプロンプト上で、srcディレクトリ以下のwicket-examplesに移動します。<br />
mvn eclipse:eclipse -DdownloadSources=true を実行することでEclipse用の設定ファイルが生成されます。</p>
<pre style="background-color:black; color:white">
%展開先のディレクトリ%apache-wicket-1.4.xsrcwicket-examples>mvn eclipse:eclipse -DdownloadSources=true
</pre>
<p>あとはEclipseで「インポート」→「既存プロジェクトをワークスペースへ」からインポートすればOK。
</p>
<p>
<span class="entry">3. サンプルを動かしてみよう</span><br />
wicket-examplesパッケージにはJettyというJAVAのWebサーバが同梱されているので、簡単にサンプルを動作させることができます。<br />
org.apache.wicket.examples.StartExamplesクラスを実行すればJettyサーバが起動します。<br />
そしたらあとは <a href="http://localhost:8080/wicket-examples/">http://localhost:8080/wicket-examples/</a> にアクセスするだけでWicketのサンプルの数々を試すことができます。<br />
勿論Tomcatで動かしても全然問題ありません。
</p>
<h4>新規プロジェクトのスタート</h4>
<p>
サンプルアプリケーションは、既に1つの完成されたアプリケーションです。<br />
新規プロジェクトをスタートさせる時には、ブランクのプロジェクトがあれば便利だなーって思いませんか？<br />
というわけでブランクプロジェクトの作り方です。
</p>
<p>Maven2の使い方なんかわかんないよーって人にも簡単！<br />
<a href="http://wicket.apache.org/quickstart.html">WicketのQuickStartのページ</a>からコマンドラインを作成することができます。</p>
<p>上記サイトにアクセスすると、こんな入力欄があります。<br />
<div id="attachment_1323" class="wp-caption aligncenter" style="width: 645px"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/quickstart.png" alt="quickstart" title="quickstart" width="635" height="283" class="aligncenter size-full wp-image-1323" /><p class="wp-caption-text">QuickStartページ</p></div></p>
<p>各入力欄の意味は、<br />
　GroupId:　パッケージとして使用される<br />
　ArtifactId:　プロジェクト名として使用される<br />
　Version:　Wicketのバージョン<br />
こんな感じです。<br />
これらを入力していくと、勝手にCommand Line欄にコマンドが組み立てられていくって寸法です。なんて便利！</p>
<p>次にコマンドプロンプト上でプロジェクトを作成したいディレクトリに移動し、先ほど生成したコマンドラインをコピペして実行します。<br />
(※Proxyの設定などはこちらを参考に。→<a href="http://wiki.fdiary.net/maven2/?CookBook#l41">Maven2のTipsを集めるwiki#固有の環境設定</a>)</p>
<pre class="wp_codebox" style="background-color:black; color:white">
C:test>mvn archetype:create -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.4.1 -DgroupId=jp.co.eni.wicket -DartifactId=sample
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:create] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:create]
[WARNING] This goal is deprecated. Please use mvn archetype:generate instead
[INFO] Defaulting package to group ID: jp.co.eni.wicket
Downloading: http://repo1.maven.org/maven2/org/apache/wicket/wicket-archetype-quickstart/1.4.1/wicket-archetype-quickstart-1.4.1.jar
13K downloaded  (wicket-archetype-quickstart-1.4.1.jar)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: wicket-archetype-quickstart:1.4.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: jp.co.eni.wicket
[INFO] Parameter: packageName, Value: jp.co.eni.wicket
[INFO] Parameter: package, Value: jp.co.eni.wicket
[INFO] Parameter: artifactId, Value: sample
[INFO] Parameter: basedir, Value: C:test
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: C:testsample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9 seconds
[INFO] Finished at: Wed Aug 26 11:11:43 JST 2009
[INFO] Final Memory: 7M/14M
[INFO] ------------------------------------------------------------------------
</pre>
<p>最後に「<b>[INFO] BUILD SUCCESSFUL</b>」が出てればOK。</p>
<p>
さて、実はもうこれだけで実行可能な状態なんです。<br />
上記例では、C:testにsampleというディレクトリが作成されています。<br />
コマンドプロンプト上でこのsampleディレクトリに移動し、以下のコマンドを実行します。</p>
<pre style="background-color:black; color:white">
C:testsample>mvn jetty:run
</pre>
<p>http://localhost:8080/sample にアクセスしてみてください。</p>
<pre>
Wicket Quickstart Archetype Homepage 

If you see this message wicket is properly configured and running
</pre>
<p>と表示されていれば成功です。
</p>
<p>
さらにEclipseで開発するには、sampleディレクトリ上で</p>
<pre style="background-color:black; color:white">
C:testsample>mvn eclipse:eclipse -DdownloadSources=true
</pre>
<p>を実行してEclipse用の設定ファイルが生成して、Eclipseで既存プロジェクトのインポートをすればOKです。
</p>
<h3>リンク集</h3>
<p><a href="http://wicket.apache.org/">Apache Wicket</a><br />
Apache Wicketの本家サイト</p>
<p><a href="http://www.wicket-ja.org/">Wicket-ja</a><br />
日本Wicketユーザーグループ(wicket-ja)の公式サイト。<br />
過去のメーリングリストの内容などが参照できます。<br />
ちなみに「うぃけっと　じぇーえー」ではなく「うぃけっとじゃ」と読むらしいです。</p>
<p><a href="http://d.hatena.ne.jp/t_yano/">矢野勉のはてな日記</a><br />
Wicket-ja創設者のブログ。<br />
著書の「<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798022217/enieni-22/ref=nosim/" name="amazletlink" target="_blank">オープンソース徹底活用 WicketによるWebアプリケーション開発</a>」には大変お世話になっております。</p>
<p><a href="http://wicket-study.seesaa.net/">Wicket学習帳</a><br />
最終更新が2008年08月19日で止まっていて、Ｗｉｃｋｅｔ1.3ベースまでの話が多いですが、参考になります。</p>
<h3>最後に</h3>
<p>さて、「とりあえずWicketを始めよう」という目的は達成できたでしょうか。<br />
次回以降のWicket小話では、具体的なコンポーネントの使い方とかを載せていければ、と思っております。</p>
<p>それでは、また。</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/09/wicket_02_confirm.html">Wicket小話その2. Wicketで確認メッセージを出すにはどうすればよいのか？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/wicket_01_start.html" />
	</item>
		<item>
		<title>Androidケータイ(HT-03A)買いました</title>
		<link>http://blog.eni.co.jp/tech/2009/08/bought_android_ht-03a.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/bought_android_ht-03a.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 04:13:09 +0000</pubDate>
		<dc:creator>末田 佳和</dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[コラム]]></category>
		<category><![CDATA[HT-03A]]></category>
		<category><![CDATA[アンドロイド]]></category>
		<category><![CDATA[ケータイ]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1175</guid>
		<description><![CDATA[こんにちは。
プロダクト&#38;サービス事業部 リーダーの末田です。
突然ですが、Android携帯 docomo HT-03Aを買ってしまいました。

メインケータイとしてのAndroid(HT-03A)
もともとdocomoユーザな上に、経済的にケータイ2台持ちはキツイので、
iPhoneは泣く泣く見送り(iPod touchは買ったけど)、docomoからAndroid携帯が出るという情報を聞きつけ、心待ちにしておりました。
docomo的にはスマートフォンは2台目という位置づけらしいのですが、
私としては、おもいっきり1台のメイン携帯として利用してます。
ですが、

iモードが使いたい
おサイフケータイが使いたい

という人は、2台目として利用するしかありません。
iモードメールは、ビミョーです。
iモード.netというWebメールサービスで利用できるし、
新着iっていうよくできたアプリがあるので利用可能ですが、
iモード対応携帯で定期的にメール受信しないと、10MBたまると使えなくなる等、いろいろあるみたいです。(iモード.netでメールを消しても、サーバ上からは消えないみたいです。)
私の場合、まだ10MBにいってないのでいけてるのかもしれませんが、検証できてません。
電話としてのAndroid(HT-03A)
メールやアプリなどスマートフォンとしての機能については、良くレビューされてるのですが、ケータイとして、つまり「電話」についての情報はあまりないので、ここでちょっと説明を。
電話

「電話」は、「電話」というアプリを起動します
通話履歴はありますが、発信と着信はごちゃ混ぜです。（アイコンで区別）
通話履歴から電話をかけることはできます

連絡先

電話帳は「連絡先」という名前で管理されます
「連絡先」のデータは、GMailの「連絡先」と同期されます
グループ設定はできません。PCでGMailのグループ設定をすると、グループを選ぶことができるようになります。
普通の携帯の場合、あかさたな・・・等でのタブでの切り替えができることが多いですが、できません。

着信音・バイブ

一般的な「ジリリリ」等の音はデフォルトで入ってます。
着メロは、Androidで再生できる形式の音楽データを設定できます
iモード等で配布されている着メロ、着うたは使えません
「連絡先」の人毎に着信音の設定ができます
「連絡先」のグループ毎に着信音の設定はできません
バイブは、着信時にON/OFFを指定することができます
バイブは、人毎、グループ毎の設定、バイブパターンの設定はできません
マナーモード、サイレントの設定はできます

その他

他のアプリが重かったりすると、「電話」アプリのレスポンスも悪くなります。つまり、ケータイだからといって「電話」が特別扱いされてたりしません。他のアプリと同じ扱いです。

上記の説明は、標準のアプリの話です。
連絡先アプリ等出ていますので、いろいろカスタマイズできます。
電話の機能としては、最低限基本的な機能しかないので、
電話としてガシガシ使う人はやっぱりちょっとキビシイかもしれません。
私のように「帰るコール」するぐらいしか電話しない人は問題ないです。
次は
さて、docomoでは「ケータイするGoogle」として売ってますが、
技術者的には、GoogleというよりAndroid OSというところが、ヒジョーに注目度高いですので、
次回は、Androidアプリを作ってみました話をしようと思います。
それでは！
あわせて読みたい

アンドロイダー育成日記 -Androidと仲良くなるには- その1
アンドロイダー育成日記 -Androidと仲良くなるには- その2
アンドロイダー育成日記 -Androidと仲良くなるには- その3

]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
プロダクト&amp;サービス事業部 リーダーの末田です。</p>
<p>突然ですが、Android携帯 <a href="http://www.nttdocomo.co.jp/product/foma/pro/ht03a/">docomo HT-03A</a>を買ってしまいました。</p>
<p><span id="more-1175"></span></p>
<h3>メインケータイとしてのAndroid(HT-03A)</h3>
<p>もともとdocomoユーザな上に、経済的にケータイ2台持ちはキツイので、<br />
iPhoneは泣く泣く見送り(iPod touchは買ったけど)、docomoからAndroid携帯が出るという情報を聞きつけ、心待ちにしておりました。</p>
<p>docomo的にはスマートフォンは2台目という位置づけらしいのですが、<br />
私としては、おもいっきり1台のメイン携帯として利用してます。<br />
ですが、</p>
<ul>
<li>iモードが使いたい</li>
<li>おサイフケータイが使いたい</li>
</ul>
<p>という人は、2台目として利用するしかありません。<br />
iモードメールは、ビミョーです。<br />
iモード.netというWebメールサービスで利用できるし、<a href="http://jp.androlib.com/android.application.jp-cane-checki-jAnq.aspx"><br />
新着i</a>っていうよくできたアプリがあるので利用可能ですが、<br />
iモード対応携帯で定期的にメール受信しないと、10MBたまると使えなくなる等、いろいろあるみたいです。(iモード.netでメールを消しても、サーバ上からは消えないみたいです。)<br />
私の場合、まだ10MBにいってないのでいけてるのかもしれませんが、検証できてません。</p>
<h3>電話としてのAndroid(HT-03A)</h3>
<p>メールやアプリなどスマートフォンとしての機能については、良くレビューされてるのですが、ケータイとして、つまり「電話」についての情報はあまりないので、ここでちょっと説明を。</p>
<p>電話</p>
<ul>
<li>「電話」は、「電話」というアプリを起動します</li>
<li>通話履歴はありますが、発信と着信はごちゃ混ぜです。（アイコンで区別）</li>
<li>通話履歴から電話をかけることはできます</li>
</ul>
<p>連絡先</p>
<ul>
<li>電話帳は「連絡先」という名前で管理されます</li>
<li>「連絡先」のデータは、GMailの「連絡先」と同期されます</li>
<li>グループ設定はできません。PCでGMailのグループ設定をすると、グループを選ぶことができるようになります。</li>
<li>普通の携帯の場合、あかさたな・・・等でのタブでの切り替えができることが多いですが、できません。</li>
</ul>
<p>着信音・バイブ</p>
<ul>
<li>一般的な「ジリリリ」等の音はデフォルトで入ってます。</li>
<li>着メロは、Androidで再生できる形式の音楽データを設定できます</li>
<li>iモード等で配布されている着メロ、着うたは使えません</li>
<li>「連絡先」の人毎に着信音の設定ができます</li>
<li>「連絡先」のグループ毎に着信音の設定はできません</li>
<li>バイブは、着信時にON/OFFを指定することができます</li>
<li>バイブは、人毎、グループ毎の設定、バイブパターンの設定はできません</li>
<li>マナーモード、サイレントの設定はできます</li>
</ul>
<p>その他</p>
<ul>
<li>他のアプリが重かったりすると、「電話」アプリのレスポンスも悪くなります。つまり、ケータイだからといって「電話」が特別扱いされてたりしません。他のアプリと同じ扱いです。</li>
</ul>
<p>上記の説明は、標準のアプリの話です。<br />
連絡先アプリ等出ていますので、いろいろカスタマイズできます。</p>
<p>電話の機能としては、最低限基本的な機能しかないので、<br />
電話としてガシガシ使う人はやっぱりちょっとキビシイかもしれません。<br />
私のように「帰るコール」するぐらいしか電話しない人は問題ないです。</p>
<h3>次は</h3>
<p>さて、docomoでは「ケータイするGoogle」として売ってますが、<br />
技術者的には、GoogleというよりAndroid OSというところが、ヒジョーに注目度高いですので、<br />
次回は、Androidアプリを作ってみました話をしようと思います。<br />
それでは！</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">アンドロイダー育成日記 -Androidと仲良くなるには- その1</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">アンドロイダー育成日記 -Androidと仲良くなるには- その3</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/bought_android_ht-03a.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/bought_android_ht-03a.html" />
	</item>
		<item>
		<title>アンドロイダー育成日記 -Androidと仲良くなるには- その3</title>
		<link>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 01:15:02 +0000</pubDate>
		<dc:creator>正木 恵二</dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[アンドロイド]]></category>
		<category><![CDATA[リンク集]]></category>
		<category><![CDATA[作業日誌]]></category>
		<category><![CDATA[初心者]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1111</guid>
		<description><![CDATA[
このエントリーは下記の記事の続きです。
アンドロイダー育成日記 -Androidと仲良くなるには- その2

こんにちは。正木です。
今回は読者の方々から応援メッセージをたくさんいただいておりますので、そちらの方を少しご紹介したいと思います。

アンドロイダーとして成長する姿を見ていると、とても清々しい気分になります！　がんばってください！
実機もなくエミュレータだけで開発されているのでしょうが、そんな困難を恐れず立ち向かっている事に好感が持てます！
空腹も眠気も吹き飛ばして、いっぱしのアンドロイダーを目指してください！

温かい、励ましのコメント、本当にありがとうございます！
今回ご紹介させていただいた方々には、番組オリジナル『見習いアンドロイダーTシャツ』をお送りいたします。
まだまだ応援メッセージの方は受け付けておりますので、どしどしお寄せください！
…というワケで、以上のくだりはフィクションですんで、軽く右から左へ受け流してください。
それでは、本編をご覧あれ～。

（※ 記事中の役立つ凡例 =&#62; ☆：役立つ外部リンク）
前回まで（～#28）
・Google Android向けアプリが1つ完成したが、「インターネット等の通信」や「GPS」といったものを全く活用していないアプリになった。
・アプリを作成する際の超基本的な考え方は身についたように感じている。だが、応用はまだまだ。
#29
第1弾アプリが辛くも完成したので、第2弾アプリの製作に取り掛かりたいと思う。
それに先立って、Android端末ユーザの先輩から要望をいただいた。
テーマは『天気予報』で、
必要な機能としては『数時間ごとの予報が見たい』とのこと。
この【数時間ごと】というのがミソだったりする。
「日ごと」の天気予報はヨシとして、「数時間ごと」の予報だと配信されていない事が多い、らしい。
たしかに、数時間ごとの天気予報を配信しているサイトってば、ほんの一握りのように感じられる。
気付かなかった。
何から調査すればよいのか？？？　…まずは落ち着こう。
#30
このTech Blog用の記事（Android日記①や②）を書き終えたので、Blog管理者の方へ入稿。空腹の極み。
#31
第2弾アプリ作成にあたり……しっかし、何から手を付けていけばよいものか。
どうやら「単に天気予報を出す、というのがどうも…」という点が、自分の中で引っ掛かっている気がする。
#32
先日の帰りしなあたりに先輩からいただいたアイディアを元に、アプリの設計図を書いてみる。
なんとなくできた…が、ほどよい量の調査事項もでてきた。どーなるやら。
#33
あー、夏休み。
なので4、5日間ほど手を止める。
手を止めたのは、ちょいと泳ぎ疲れたからではない。
#34
このTech Blogの管理者の方から「記事をリリースする前に、ちょっとレイアウトを修正してほしい」との依頼をいただいたので対応する。
Tech Blog用記事を入稿すると、リリース前に多少のチェック（「内容が適切か」「話の筋が通ってるか」「レイアウトは整っているか」程度の一般的なもの）が入るのだが、今の今まで「内容」に対してはほとんどおトガメがない。
会社の人間の声が外部に、これだけストレートに響き渡るこの場で、こんな砕けた文章を書いてていいのか？という疑問はあるのだけども、しばしば杞憂で終わったりする。
これこそが言論の自由、表現の自由かと。
考えてみれば、著作物を拝見した際に「これ、すごいな」と衝撃を受けずにはいられなかったという作家さんが、2名ほど居りまして。
スタパ斎藤氏と西原理恵子氏。
その方々から勝手に影響を受けて、いまの自分はこんな文体になっているんだな、という自己分析もあったりします。
…文体だけの問題ではないか。
#35
Android向けアプリの動作に必要なファイルってば『1つだけ』なんだな。APKとかいう拡張子のファイルが1つだけ。
構造が簡潔すぎて驚いた。
でも、例えばiPhone向けのアプリもこんな感じなんだろうか…。この形式がスタンダードになってたりする、とか。
あと、Androidアプリは『JavaであってJavaでない』らしい。
（カギカッコ内の語句、下記リンク先より引用）
☆Android Market配布を目指しEclipseでHelloWorld！ (1/3) &#8211; ＠IT

#36
SpinnerというViewにAdapter（ArrayAdapterオブジェクト）をセットする方法がわからん。例外しか出ないんですが…。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example.weatherTest;
&#160;
public class WeatherTest extends Activity &#123;
    @Override
    public void onCreate&#40;Bundle savedInstanceState&#41; &#123;
        // 省略
&#160;
        final String&#91;&#93; ITEMS = &#123;&#34;テスト項目A&#34;, &#34;テスト項目B&#34;, &#34;テスト項目C&#34;&#125;;
 [...]]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーは下記の記事の続きです。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a></p>
</div>
<p>こんにちは。正木です。</p>
<p>今回は読者の方々から応援メッセージをたくさんいただいておりますので、そちらの方を少しご紹介したいと思います。</p>
<ul>
<li>アンドロイダーとして成長する姿を見ていると、とても清々しい気分になります！　がんばってください！</li>
<li>実機もなくエミュレータだけで開発されているのでしょうが、そんな困難を恐れず立ち向かっている事に好感が持てます！</li>
<li>空腹も眠気も吹き飛ばして、いっぱしのアンドロイダーを目指してください！</li>
</ul>
<p>温かい、励ましのコメント、本当にありがとうございます！<br />
今回ご紹介させていただいた方々には、番組オリジナル『見習いアンドロイダーTシャツ』をお送りいたします。<br />
まだまだ応援メッセージの方は受け付けておりますので、どしどしお寄せください！</p>
<p>…というワケで、以上のくだりはフィクションですんで、軽く右から左へ受け流してください。<br />
それでは、本編をご覧あれ～。<br />
<span id="more-1111"></span><br />
（※ 記事中の役立つ凡例 =&gt; ☆：役立つ外部リンク）</p>
<h4>前回まで（～#28）</h4>
<p>・Google Android向けアプリが1つ完成したが、「インターネット等の通信」や「GPS」といったものを全く活用していないアプリになった。<br />
・アプリを作成する際の超基本的な考え方は身についたように感じている。だが、応用はまだまだ。</p>
<h4>#29</h4>
<p>第1弾アプリが辛くも完成したので、第2弾アプリの製作に取り掛かりたいと思う。</p>
<p>それに先立って、Android端末ユーザの先輩から要望をいただいた。<br />
テーマは『天気予報』で、<br />
必要な機能としては『数時間ごとの予報が見たい』とのこと。</p>
<p>この【数時間ごと】というのがミソだったりする。<br />
「日ごと」の天気予報はヨシとして、「数時間ごと」の予報だと配信されていない事が多い、らしい。<br />
たしかに、数時間ごとの天気予報を配信しているサイトってば、ほんの一握りのように感じられる。<br />
気付かなかった。</p>
<p>何から調査すればよいのか？？？　…まずは落ち着こう。</p>
<h4>#30</h4>
<p>このTech Blog用の記事（<a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">Android日記①</a>や<a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">②</a>）を書き終えたので、Blog管理者の方へ入稿。空腹の極み。</p>
<h4>#31</h4>
<p>第2弾アプリ作成にあたり……しっかし、何から手を付けていけばよいものか。</p>
<p>どうやら「単に天気予報を出す、というのがどうも…」という点が、自分の中で引っ掛かっている気がする。</p>
<h4>#32</h4>
<p>先日の帰りしなあたりに先輩からいただいたアイディアを元に、アプリの設計図を書いてみる。</p>
<p>なんとなくできた…が、ほどよい量の調査事項もでてきた。どーなるやら。</p>
<h4>#33</h4>
<p>あー、夏休み。</p>
<p>なので4、5日間ほど手を止める。<br />
手を止めたのは、ちょいと泳ぎ疲れたからではない。</p>
<h4>#34</h4>
<p>このTech Blogの管理者の方から「記事をリリースする前に、ちょっとレイアウトを修正してほしい」との依頼をいただいたので対応する。</p>
<p>Tech Blog用記事を入稿すると、リリース前に多少のチェック（「内容が適切か」「話の筋が通ってるか」「レイアウトは整っているか」程度の一般的なもの）が入るのだが、今の今まで「内容」に対してはほとんどおトガメがない。<br />
会社の人間の声が外部に、これだけストレートに響き渡るこの場で、こんな砕けた文章を書いてていいのか？という疑問はあるのだけども、しばしば杞憂で終わったりする。</p>
<p>これこそが言論の自由、表現の自由かと。</p>
<p>考えてみれば、著作物を拝見した際に「これ、すごいな」と衝撃を受けずにはいられなかったという作家さんが、2名ほど居りまして。<br />
<a href="http://ja.wikipedia.org/wiki/スタパ齋藤">スタパ斎藤</a>氏と<a href="http://ja.wikipedia.org/wiki/西原理恵子">西原理恵子</a>氏。<br />
その方々から勝手に影響を受けて、いまの自分はこんな文体になっているんだな、という自己分析もあったりします。</p>
<p>…文体だけの問題ではないか。</p>
<h4>#35</h4>
<p>Android向けアプリの動作に必要なファイルってば『1つだけ』なんだな。APKとかいう拡張子のファイルが1つだけ。</p>
<p>構造が簡潔すぎて驚いた。<br />
でも、例えばiPhone向けのアプリもこんな感じなんだろうか…。この形式がスタンダードになってたりする、とか。</p>
<p>あと、Androidアプリは『JavaであってJavaでない』らしい。<br />
（カギカッコ内の語句、下記リンク先より引用）</p>
<p>☆<a href="http://www.atmarkit.co.jp/fjava/rensai4/android01/android01_1.html">Android Market配布を目指しEclipseでHelloWorld！ (1/3) &#8211; ＠IT</a><br />
<a name="story36"></a></p>
<h4>#36</h4>
<p>SpinnerというViewにAdapter（ArrayAdapterオブジェクト）をセットする方法がわからん。例外しか出ないんですが…。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p111163"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p1111code63"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.example.weatherTest</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> WeatherTest <span style="color: #000000; font-weight: bold;">extends</span> Activity <span style="color: #009900;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// 省略</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> ITEMS <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;テスト項目A&quot;</span>, <span style="color: #0000ff;">&quot;テスト項目B&quot;</span>, <span style="color: #0000ff;">&quot;テスト項目C&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
        Spinner someSpinner <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Spinner<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">someSpinner</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        someSpinner.<span style="color: #006633;">setAdapter</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayAdapter<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span>, ITEMS<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// 省略</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>何が間違ってんだか……あー、もぉ。</p>
<h4>#37</h4>
<p><a href="#story36">#36</a>の不具合の原因がわかった。</p>
<p>Rクラスが複数個あるとは知らず、「(当プロジェクトのパッケージ).R.layout」クラスの定数を渡していたのがダメだった。</p>
<p>どういうコトかと言えば、下記に具体例（改善案）を示す。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p111164"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1111code64"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// #36のソースの10行目</span>
<span style="color: #666666; font-style: italic;">// ArrayAdapterのコンストラクタの第2引数には「android.R.layout」クラスの定数を設定するべき</span>
someSpinner.<span style="color: #006633;">setAdapter</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayAdapter<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, android.<span style="color: #006633;">R</span>.<span style="color: #006633;">layout</span>.<span style="color: #006633;">simple_spinner_item</span>, ITEMS<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>androidパッケージの中にもRクラスってば存在したんやね。その存在を知らなかった…。</p>
<p>解決するまで、時計の短針が2周していきよった。</p>
<p>…次だ！　次！</p>
<h4>#38</h4>
<p>なんだかんだで、天気予報と言えば、やっぱ『ヤン坊マー坊』ではなかろうか。</p>
<p>この方々は気象予報士ではないよね。</p>
<p>でも、プライムタイム辺りで冠番組持ってはるし、気象予報士じゃないけど天気予報系番組の代名詞的な存在やし。</p>
<p>イロイロとすごいな。</p>
<h4>#39</h4>
<p>1つ目の画面（今回のアプリは画面遷移がある）のイメージがなんとなく具現化できたので、いよいよ内部的な実装に突入する。</p>
<p>GPS。</p>
<p>ほげぇ～。</p>
<p>プログラマになりたての時、技術バリバリの先輩から、「hoge（ほげ）」という言葉の由来について『hogeってのは、昔、【ホーグ】という戦艦が云々』みたく、あからさまな冗談を吹っ掛けられた憶えがある。<br />
その【ホーグ】とやらが戦艦だったかどうかは（冗談を聴く私の姿勢が、先輩の冗談以上にテキトーだったので）定かじゃないけど、冗談の規模としては異例な大きさだったはず。</p>
<p>一寸のホラにも五分の魂？</p>
<p>☆<a href="http://android.siprop.org/index.php?%CA%D9%B6%AF%B2%F1%2FGPS">勉強会/GPS &#8211; 日本Androidの会（日本アンドロイドの会）</a><br />
☆<a href="http://www.adamrocker.com/blog/169/how_to_get_gps_location_with_android.html">throw Life &#8211; AndroidでGPSを使って現在地を取得する方法</a></p>
<h4>次回予告</h4>
<p>次回は、自作アプリ第2弾の実装の続きを綴ります。<br />
ありがとうございました。</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">アンドロイダー育成日記 -Androidと仲良くなるには- その1</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a></li>
<li>アンドロイダー育成日記 -Androidと仲良くなるには- その3(本記事)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html" />
	</item>
		<item>
		<title>Ubuntu 9.04 + GCC 4.4.1でC++0xを試してみた</title>
		<link>http://blog.eni.co.jp/tech/2009/08/ubuntu-gcc-cpp0x-getting-started.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/ubuntu-gcc-cpp0x-getting-started.html#comments</comments>
		<pubDate>Wed, 19 Aug 2009 02:00:57 +0000</pubDate>
		<dc:creator>青野 和仁</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[C++0x]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[N2914]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=990</guid>
		<description><![CDATA[こんにちは。
プロダクト&#038;サービス事業部の青野です。
C++0xの一部の機能はGCC 4.3から使用することが可能になっています。そこで今回はC++0xで少し遊んでみようと思います。
C++0xとGCCの対応状況について

C++0xの概要(Faith and Brave &#8211; C++で遊ぼう)
C++0xの言語仕様(ドラフト)
GCCのC++0x対応状況


コンパイル環境の準備
Ubuntu 9.04で配布されているGCC(g++)は4.3系の為、autoがまだ実装されていません。とりあえずautoを試してみたいので7月22日にリリースされた4.4.1をソースからコンパイルしてインストールします。

GCCのダウンロードと展開

$ mkdir ~/src
$ cd ~/src
$ wget ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.4.1/gcc-4.4.1.tar.gz
$ tar xvzf gcc-4.4.1.tar.gz


GMPのダウンロードと展開

$ cd ~/src
$ wget ftp://ftp.gmplib.org/pub/gmp-4.3.1/gmp-4.3.1.tar.gz
$ tar xvzf gmp-4.3.1.tar.gz
$ mv gmp-4.3.1 gcc-4.4.1/gmp


MPFRのダウンロードと展開

$ cd ~/src
$ wget http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.gz
$ tar xvzf mpfr-2.4.1.tar.gz
$ mv mpfr-2.4.1 gcc-4.4.1/mpfr


ビルドとインストール

$ mkdir ~/src/gccobj
$ cd ~/src/gccobj
$ ../gcc-4.4.1/configure
$ make bootstrap
$ sudo make install



C++0xソースのコンパイルと実行
Initializer Listとautoを試してみた

サンプルソース(sample.cpp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include &#60;iostream&#62;
#include &#60;vector&#62;
&#160;
void print&#40;const std::vector&#60;int&#62;&#38; v&#41; &#123;
   [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
プロダクト&#038;サービス事業部の青野です。</p>
<p>C++0xの一部の機能はGCC 4.3から使用することが可能になっています。そこで今回はC++0xで少し遊んでみようと思います。</p>
<h3>C++0xとGCCの対応状況について</h3>
<ul>
<li><a href="http://d.hatena.ne.jp/faith_and_brave/20080725/1216976661">C++0xの概要(Faith and Brave &#8211; C++で遊ぼう)</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/projects#14882">C++0xの言語仕様(ドラフト)</a></li>
<li><a href="http://gcc.gnu.org/projects/cxx0x.html">GCCのC++0x対応状況</a></li>
</ul>
<p><span id="more-990"></span></p>
<h3>コンパイル環境の準備</h3>
<p>Ubuntu 9.04で配布されているGCC(g++)は4.3系の為、autoがまだ実装されていません。とりあえずautoを試してみたいので7月22日にリリースされた4.4.1をソースからコンパイルしてインストールします。</p>
<ol>
<li>GCCのダウンロードと展開

<div class="wp_codebox"><table width="100%" ><tr id="p99072"><td class="code" id="p990code72"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>src
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>src
$ <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span>:<span style="color: #000000; font-weight: bold;">//</span>ftp.dti.ad.jp<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>lang<span style="color: #000000; font-weight: bold;">/</span>gcc<span style="color: #000000; font-weight: bold;">/</span>releases<span style="color: #000000; font-weight: bold;">/</span>gcc-4.4.1<span style="color: #000000; font-weight: bold;">/</span>gcc-4.4.1.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf gcc-4.4.1.tar.gz</pre></td></tr></table></div>

</li>
<li>GMPのダウンロードと展開

<div class="wp_codebox"><table width="100%" ><tr id="p99073"><td class="code" id="p990code73"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>src
$ <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span>:<span style="color: #000000; font-weight: bold;">//</span>ftp.gmplib.org<span style="color: #000000; font-weight: bold;">/</span>pub<span style="color: #000000; font-weight: bold;">/</span>gmp-4.3.1<span style="color: #000000; font-weight: bold;">/</span>gmp-4.3.1.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf gmp-4.3.1.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">mv</span> gmp-4.3.1 gcc-4.4.1<span style="color: #000000; font-weight: bold;">/</span>gmp</pre></td></tr></table></div>

</li>
<li>MPFRのダウンロードと展開

<div class="wp_codebox"><table width="100%" ><tr id="p99074"><td class="code" id="p990code74"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>src
$ <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.mpfr.org<span style="color: #000000; font-weight: bold;">/</span>mpfr-current<span style="color: #000000; font-weight: bold;">/</span>mpfr-2.4.1.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf mpfr-2.4.1.tar.gz
$ <span style="color: #c20cb9; font-weight: bold;">mv</span> mpfr-2.4.1 gcc-4.4.1<span style="color: #000000; font-weight: bold;">/</span>mpfr</pre></td></tr></table></div>

</li>
<li>ビルドとインストール

<div class="wp_codebox"><table width="100%" ><tr id="p99075"><td class="code" id="p990code75"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>gccobj
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>gccobj
$ ..<span style="color: #000000; font-weight: bold;">/</span>gcc-4.4.1<span style="color: #000000; font-weight: bold;">/</span>configure
$ <span style="color: #c20cb9; font-weight: bold;">make</span> bootstrap
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

</li>
</ol>
<h3>C++0xソースのコンパイルと実行</h3>
<h4>Initializer Listとautoを試してみた</h4>
<ol>
<li>サンプルソース(sample.cpp)

<div class="wp_codebox"><table width="100%" ><tr id="p99076"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code" id="p990code76"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> v<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;[print]&quot;</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">// std::vector&lt;int&gt;::const_iteratorだってautoでOK</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">auto</span> it <span style="color: #000080;">=</span> v.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> v.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #000040;">*</span>it <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> rprint<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #000040;">&amp;</span> v<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;[rprint]&quot;</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">// std::vector&lt;int&gt;::const_reverse_iteratorだってautoでOK!</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">auto</span> it <span style="color: #000080;">=</span> v.<span style="color: #007788;">rbegin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> v.<span style="color: #007788;">rend</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #000040;">*</span>it <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> v <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>1, 5, 10<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #666666;">// std::vector&lt;int&gt;::iteratorだってautoでOK!</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">auto</span> it <span style="color: #000080;">=</span> v.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> v.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #000040;">*</span>it <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    std<span style="color: #008080;">::</span><span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> std<span style="color: #008080;">::</span><span style="color: #007788;">endl</span><span style="color: #008080;">;</span>
&nbsp;
    print<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    rprint<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

</li>
<li>コンパイル<br />
コンパイル時にC++0xの機能を使用する場合、コンパイル時に-std=gnu++0xオプションを指定する必要があります。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p99077"><td class="code" id="p990code77"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">g++</span> <span style="color: #660033;">-std</span>=gnu++0x sample.cpp</pre></td></tr></table></div>

</li>
<li>実行結果

<div class="wp_codebox"><table width="100%" ><tr id="p99078"><td class="code" id="p990code78"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>a.out
<span style="color: #000000;">1</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">10</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>print<span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">10</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>rprint<span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000;">10</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">1</span></pre></td></tr></table></div>

</li>
</ol>
<p>autoに関しては多用すると可読性を損なう可能性がありますが、STLのコンテナクラスをイテレートする場合には可読性が上がっていい感じかなと思います。</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/05/cpp0x_date_extended_manipulators.html">C++0xでの日付の書式付入出力の仕組み</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/ubuntu-gcc-cpp0x-getting-started.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/ubuntu-gcc-cpp0x-getting-started.html" />
	</item>
		<item>
		<title>アンドロイダー育成日記 -Androidと仲良くなるには- その2</title>
		<link>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html#comments</comments>
		<pubDate>Tue, 18 Aug 2009 03:00:18 +0000</pubDate>
		<dc:creator>正木 恵二</dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[アンドロイド]]></category>
		<category><![CDATA[リンク集]]></category>
		<category><![CDATA[作業日誌]]></category>
		<category><![CDATA[初心者]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1034</guid>
		<description><![CDATA[
このエントリーは下記の記事の続きです。
アンドロイダー育成日記 -Androidと仲良くなるには- その1

こんにちは。正木です。
おまっとさんでございました。
Google Android向けアプリ作成日記の、続きでございますよ。
それでは、めしあがれ～。

（※ 記事中の役立つ凡例 =&#62; ◎：役立つ教訓 &#124; ☆：役立つ外部リンク）
前回まで（～#11）
・Google Android向けアプリの開発環境を作った。
・雑誌『SoftwareDesign』を見ながら、アプリ作成の『いろは』の『い』を見ていった。
・そのほか、コーディングの方法や挙動などを確認した。
#12
アプレットの『DroidDraw』が、案外使いづらい、のではないか？？
デザインが思い通りいかない事があるんだ。
適当なレイアウトのコンテナみたいなLayoutに、適当なViewを包含させると、
子になっているViewが、マウスでクリックしてもアクティブにならなかったりする（そうなるとViewのプロパティがレイアウト画面から設定できない）。
Visual Studioで、カスタムコントロールのレイアウトをデザインしてる時に顔を出す、
あの「いーっとなる」感じを思い出す。
親コンテナと子コントロールのAnchor プロパティやDockプロパティを適宜設定したけど、
期待していないサイズ変わり方しよるぞ、コイツ、みたいな。
…VSのくだりに何の共通点があるかわかんないけど、とにかくめんどくさい。
「まぁ、ベータ版だしな…」と自分に言い聞かせる。
#13
オリジナルアプリの作成を始める事にする。
まずは設計書…のようなものを作る。
テキトーな裏紙に、機能とレイアウトの概要を、嵐のような勢いで書けばハイできあがり♪
（個人的には）面白そうなアプリだと思うのだが…そもそも実現できるのかどうか。
（アプリの概要は「あとがき」を参照のこと。）

#14
なんとなくではあるが、画面レイアウトは構想に近付いてきた。
一部（たとえばEditTextのBackColorやTextColorプロパティを変えたりとかしたり）の設定を除けば、イイ感じ。たぶん。
今後の実装にあたり、気付いた点・不安な点を挙げる。

Eclipseの画面レイアウト機能にあるプロパティからでは、ViewのBackColorやTextColorは設定できないのでは？
イメージのリソースは、どこにどうやって持たせるのだ？
おなかへった。
Android端末に、どれだけの負荷をかける事が許されるのか。実機が無くても検証する方法ってないんかな？
自分が作りたいアプリの仕様的に、問題データを簡単に追加したいのだが…。どうやってもたせようか？　ダウンロードとかやっちゃう？
画面レイアウトを作るのは『DroidDraw』だけではしんどい。そもそも、『DroidDraw』のXMLが表示されるエリアは、あれはエディタではないんだな。よくわからないがカーソルキーが死んでしまう時がある。きっかけもわかんない。いきなりお亡くなりになる。なので、『DroidDraw』だけでなく、Eclipseでのレイアウト機能も併用した方がよい。
おなかへってたけど、コーヒー飲んだからちょっとはマシになったかな。

※後日談として、上記の疑問点の見解を書いておく。

調査せず。今回はソースの中で指定した（ViewのsetTextColorメソッドなどに、android.graphics.Colorクラスの定数を渡す）。
画像ファイル自体は専用のフォルダに保持。ただ、その画像の参照は「パス指定」でなく「画像に割り振られたint型の定数」でやる。
お昼休憩までがんばりましょう。
これを使えばOKかと。
結局、今回は対応しなかったのでパス。
（上記の意見に変わりなし）
ごはんはちゃんと食べましょう。

#15
久しぶりに、食事してて「あきらめ」と「敗北感」を悟った。
自分で大盛りをオーダーしときながら…。
パスタは怖い。もーしばらく要らん。
つべこべ言わず作業再開。
#16
AndroidのスタートアップJavaクラス（src\(任意のパッケージ)\(一番最初に生成されるクラス).java）のonCreateメソッドは、
WicketのJavaクラスのコンストラクタメソッドみたいに、
ボタン押下時に何度も何度も呼び出されることはない。
期待通りでちょっと安心。
#17
各Viewの可視状態は、boolean値でなくint値で設定しなくちゃならん。
（setVisibilityメソッド とかのパラメータのこと。左記メソッドだと、android.view.Viewクラスの定数（int）を渡す必要がある。）
なんというか、わかりづらい…のは固定観念のせいか！？
#18
ねむいでございます。
#19
秒変わりきっかけのイベントもフックできた…が、これでいいのか？
タイマーのスタートはできたけど、
「タイマーをストップしてから、再スタートする」というアクションが、これでは実現できないっぽい。
（※ この時点ではandroid.os.Handlerクラスを用いて実装していた。結局は#25のような実装になったが、Handlerクラスを使っても「タイマーをストップしてから、再スタートする」のは実現可能であると思われる。）
それ以外の疑問（#14で挙げた項目たち）はほとんど解消できた。
ただ新しい疑問も出現したが…それは進捗の証としてヨシとしよう（甘いね）。
あと1日ぐらいで、なんとか使用できるぐらいまでもっていこう。
たかが自己満足のために、
未経験のものに対してここまでコーディングできるものかと、我ながら感心してます。
本日の作業は終了！！
☆5.4 タイマーイベント ‎(Android Docs(初級編))‎
☆八角研究所 : Android で再開する Java プログラミング（3） &#8211; モグラ叩き
☆デジモノ狂想曲！: Android で タイマー処理 を考えてみた
#20
おはようございます。
#21
今日はなんだか手がよく動く。マリオでいうところの「無敵状態」。
#22
無敵状態が終わった。ものの1時間だったですけど。
#23
タイマー制御が難しい。thread.sleepが期待通り動いてくれない。
（※ 後日談だが、thread.sleepは実装しなかった。）
☆勝手にAndroidブログ &#8211; PukiWiki
#24
並列処理が大事！
☆Androidで学ぶ並列処理とGUI &#8211; やさしいデスマーチ

#25
秒刻みのイベントをフックするのが難しかったので、
ChronometerとかいうViewのChronometerTickイベントをフックするようにした。
なんか…違うよなぁ。
コーディング量は少なくて済んでるし、やりたい事も全部実現できてるんだけど、
これが最適解だって気がしない。
でも、今回はこれでいこう。
あと、クラス変数の宣言の時点で、「(Viewクラス)this.findViewById(R.id&#8230;)」を代入するとコケる。
当然と言えば当然、なのか？
とにかくVBでも似たようなミスをした憶えがあるので、記念に書き留めておく。
☆クロノメーター(Chronometer)を使用するには &#8211; 逆引きAndroid入門
#26
問題をアプリの外部から追加したいんだけど…無理かなぁ。
いろいろ考えたけど、何とも難しそうなのでその対応はやめておこう。
知恵が生まれるほどの知識が蓄えられたら、改めて考えようかしら。
進捗としては、もうゴールの手前ぐらいまで来ている感じがする。
「負けないで」が聞こえてもおかしくないぐらいゴールに近い。
大きなタマネギはすぐそこ。
なんというか、アプリの雰囲気的に『マジカル頭脳パワー』になってきた。
…どーせなら、もっと似せようか。
#27
◎TextViewのsetTextメソッドに、数値（intとかlongとか）を渡すと例外が発生する。
もーちょっとで完成なのに…。
#28
ソース中にコメントも入れ終わったし、ひとまず完成！！

あとがき
どんなアプリを作ったのかを簡単に書いておこうと思う。
【イメージ】

【概要】

『Mosaics』（モザイクス）というゲームアプリ。
『「何か」が25枚のモザイクによって隠されているので、それを制限時間内に当てる』のが目的。
モザイクは数秒おきに1枚ずつはがされていく。残り時間が少なくなると、モザイクの はがれ方も速くなる。
問題がスタートしてから正解するまでが早いほど高得点。得点は100点から減っていき、最低で-50点。
答えがわかれば、回答エリアのすぐ右にある白いボタンを押す。押すと回答モードに入り、タイマーが止まる。ボタンを押さなくても回答は入力できる。
判定ボタンを押すと、入力された回答がチェックされる。正解ならばモザイクが全部はずれて正解用メッセージが表示される。不正解ならばタイマーが再スタート。
こたえボタンを押すと問題終了（「制限時間内に正解できなかった」扱いになる）。

【対応していない事】

インターネットを用いた機能（逆に言えば、圏外でもアプリの動作は可能、なはず）
問題の追加（動的な問題データの追加方法が思い浮かばなかった。特にリソースオブジェクト系の追加について）
点数のセーブ（アプリを終了すると通算の獲得得点がクリアされる）
コンフィグ機能（最高点、最低点、タイマーの開始値、モザイクがめくれる速度 などの諸々の設定が不可）
国際化、メッセージのプロパティ化
「1000点を取ればミステリーツアーにご招待」とか「正解できないから檻から出られない」みたいなもの

などなど
次回予告
次回は、自作アプリ第2弾の実装開始の場面から綴ります。
ありがとうございました。
あわせて読みたい

アンドロイダー育成日記 -Androidと仲良くなるには- その1
アンドロイダー育成日記 -Androidと仲良くなるには- その2(本記事)
アンドロイダー育成日記 -Androidと仲良くなるには- その3

]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーは下記の記事の続きです。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">アンドロイダー育成日記 -Androidと仲良くなるには- その1</a></p>
</div>
<p>こんにちは。正木です。</p>
<p>おまっとさんでございました。<br />
<a href="http://code.google.com/intl/ja/android/">Google Android</a>向けアプリ作成日記の、続きでございますよ。</p>
<p>それでは、めしあがれ～。<br />
<span id="more-1034"></span><br />
（※ 記事中の役立つ凡例 =&gt; ◎：役立つ教訓 | ☆：役立つ外部リンク）</p>
<h4>前回まで（～#11）</h4>
<p>・Google Android向けアプリの開発環境を作った。<br />
・雑誌<a href="http://gihyo.jp/magazine/SD">『SoftwareDesign』</a>を見ながら、アプリ作成の『いろは』の『い』を見ていった。<br />
・そのほか、コーディングの方法や挙動などを確認した。</p>
<h4>#12</h4>
<p>アプレットの<a href="http://www.droiddraw.org/">『DroidDraw』</a>が、案外使いづらい、のではないか？？</p>
<p>デザインが思い通りいかない事があるんだ。</p>
<p>適当なレイアウトのコンテナみたいなLayoutに、適当なViewを包含させると、<br />
子になっているViewが、マウスでクリックしてもアクティブにならなかったりする（そうなるとViewのプロパティがレイアウト画面から設定できない）。</p>
<p>Visual Studioで、カスタムコントロールのレイアウトをデザインしてる時に顔を出す、<br />
あの「いーっとなる」感じを思い出す。<br />
親コンテナと子コントロールのAnchor プロパティやDockプロパティを適宜設定したけど、<br />
期待していないサイズ変わり方しよるぞ、コイツ、みたいな。</p>
<p>…VSのくだりに何の共通点があるかわかんないけど、とにかくめんどくさい。</p>
<p>「まぁ、ベータ版だしな…」と自分に言い聞かせる。</p>
<h4>#13</h4>
<p>オリジナルアプリの作成を始める事にする。</p>
<p>まずは設計書…のようなものを作る。</p>
<p>テキトーな裏紙に、機能とレイアウトの概要を、嵐のような勢いで書けばハイできあがり♪</p>
<p>（個人的には）面白そうなアプリだと思うのだが…そもそも実現できるのかどうか。</p>
<p>（アプリの概要は<a href="#afterword">「あとがき」</a>を参照のこと。）<br />
<a name="story14"></a></p>
<h4>#14</h4>
<p>なんとなくではあるが、画面レイアウトは構想に近付いてきた。<br />
一部（たとえばEditTextのBackColorやTextColorプロパティを変えたりとかしたり）の設定を除けば、イイ感じ。たぶん。</p>
<p>今後の実装にあたり、気付いた点・不安な点を挙げる。</p>
<ol type="1">
<li>Eclipseの画面レイアウト機能にあるプロパティからでは、ViewのBackColorやTextColorは設定できないのでは？</li>
<li>イメージのリソースは、どこにどうやって持たせるのだ？</li>
<li>おなかへった。</li>
<li>Android端末に、どれだけの負荷をかける事が許されるのか。実機が無くても検証する方法ってないんかな？</li>
<li>自分が作りたいアプリの仕様的に、問題データを簡単に追加したいのだが…。どうやってもたせようか？　ダウンロードとかやっちゃう？</li>
<li>画面レイアウトを作るのは『DroidDraw』だけではしんどい。そもそも、『DroidDraw』のXMLが表示されるエリアは、あれはエディタではないんだな。よくわからないがカーソルキーが死んでしまう時がある。きっかけもわかんない。いきなりお亡くなりになる。なので、『DroidDraw』だけでなく、Eclipseでのレイアウト機能も併用した方がよい。</li>
<li>おなかへってたけど、コーヒー飲んだからちょっとはマシになったかな。</li>
</ol>
<p>※後日談として、上記の疑問点の見解を書いておく。</p>
<ol type="1">
<li>調査せず。今回はソースの中で指定した（ViewのsetTextColorメソッドなどに、android.graphics.Colorクラスの定数を渡す）。</li>
<li>画像ファイル自体は専用のフォルダに保持。ただ、その画像の参照は「パス指定」でなく「画像に割り振られたint型の定数」でやる。</li>
<li>お昼休憩までがんばりましょう。</li>
<li><a href="http://developer.android.com/intl/ja/guide/developing/tools/ddms.html">これ</a>を使えばOKかと。</li>
<li>結局、今回は対応しなかったのでパス。</li>
<li>（上記の意見に変わりなし）</li>
<li>ごはんはちゃんと食べましょう。</li>
</ol>
<h4>#15</h4>
<p>久しぶりに、食事してて「あきらめ」と「敗北感」を悟った。</p>
<p>自分で大盛りをオーダーしときながら…。</p>
<p>パスタは怖い。もーしばらく要らん。</p>
<p>つべこべ言わず作業再開。</p>
<h4>#16</h4>
<p>AndroidのスタートアップJavaクラス（src\(任意のパッケージ)\(一番最初に生成されるクラス).java）のonCreateメソッドは、<br />
<a href="http://www.wicket-ja.org/">Wicket</a>のJavaクラスのコンストラクタメソッドみたいに、<br />
ボタン押下時に何度も何度も呼び出されることはない。</p>
<p>期待通りでちょっと安心。</p>
<h4>#17</h4>
<p>各Viewの可視状態は、boolean値でなくint値で設定しなくちゃならん。<br />
（setVisibilityメソッド とかのパラメータのこと。左記メソッドだと、android.view.Viewクラスの定数（int）を渡す必要がある。）</p>
<p>なんというか、わかりづらい…のは固定観念のせいか！？</p>
<h4>#18</h4>
<p>ねむいでございます。</p>
<h4>#19</h4>
<p>秒変わりきっかけのイベントもフックできた…が、これでいいのか？<br />
タイマーのスタートはできたけど、<br />
「タイマーをストップしてから、再スタートする」というアクションが、これでは実現できないっぽい。<br />
（※ この時点ではandroid.os.Handlerクラスを用いて実装していた。結局は<a href="#story25">#25</a>のような実装になったが、Handlerクラスを使っても「タイマーをストップしてから、再スタートする」のは実現可能であると思われる。）</p>
<p>それ以外の疑問（<a href="#story14">#14で挙げた項目たち</a>）はほとんど解消できた。</p>
<p>ただ新しい疑問も出現したが…それは進捗の証としてヨシとしよう（甘いね）。</p>
<p>あと1日ぐらいで、なんとか使用できるぐらいまでもっていこう。</p>
<p>たかが自己満足のために、<br />
未経験のものに対してここまでコーディングできるものかと、我ながら感心してます。</p>
<p>本日の作業は終了！！</p>
<p>☆<a href="http://sites.google.com/a/gclue.jp/android-docs/54-タイマーイベント">5.4 タイマーイベント ‎(Android Docs(初級編))‎</a><br />
☆<a href="http://www.hakkaku.net/articles/20090212-348">八角研究所 : Android で再開する Java プログラミング（3） &#8211; モグラ叩き</a><br />
☆<a href="http://blog.altemasoft.com/article/30001195.html">デジモノ狂想曲！: Android で タイマー処理 を考えてみた</a></p>
<h4>#20</h4>
<p>おはようございます。</p>
<h4>#21</h4>
<p>今日はなんだか手がよく動く。マリオでいうところの「無敵状態」。</p>
<h4>#22</h4>
<p>無敵状態が終わった。ものの1時間だったですけど。</p>
<h4>#23</h4>
<p>タイマー制御が難しい。thread.sleepが期待通り動いてくれない。<br />
（※ 後日談だが、thread.sleepは実装しなかった。）</p>
<p>☆<a href="http://kousei-inc.com/portal/index.php?勝手にAndroidブログ#d037f76a">勝手にAndroidブログ &#8211; PukiWiki</a></p>
<h4>#24</h4>
<p>並列処理が大事！</p>
<p>☆<a href="http://d.hatena.ne.jp/shuji_w6e/20090701/1246459813">Androidで学ぶ並列処理とGUI &#8211; やさしいデスマーチ</a><br />
<a name="story25"></a></p>
<h4>#25</h4>
<p>秒刻みのイベントをフックするのが難しかったので、<br />
ChronometerとかいうViewのChronometerTickイベントをフックするようにした。</p>
<p>なんか…違うよなぁ。</p>
<p>コーディング量は少なくて済んでるし、やりたい事も全部実現できてるんだけど、<br />
これが最適解だって気がしない。</p>
<p>でも、今回はこれでいこう。</p>
<p>あと、クラス変数の宣言の時点で、「(Viewクラス)this.findViewById(R.id&#8230;)」を代入するとコケる。<br />
当然と言えば当然、なのか？<br />
とにかくVBでも似たようなミスをした憶えがあるので、記念に書き留めておく。</p>
<p>☆<a href="http://www.adakoda.com/android/000127.html">クロノメーター(Chronometer)を使用するには &#8211; 逆引きAndroid入門</a></p>
<h4>#26</h4>
<p>問題をアプリの外部から追加したいんだけど…無理かなぁ。</p>
<p>いろいろ考えたけど、何とも難しそうなのでその対応はやめておこう。</p>
<p>知恵が生まれるほどの知識が蓄えられたら、改めて考えようかしら。</p>
<p>進捗としては、もうゴールの手前ぐらいまで来ている感じがする。<br />
「負けないで」が聞こえてもおかしくないぐらいゴールに近い。<br />
大きなタマネギはすぐそこ。</p>
<p>なんというか、アプリの雰囲気的に<a href="http://ja.wikipedia.org/wiki/マジカル頭脳パワー!!">『マジカル頭脳パワー』</a>になってきた。</p>
<p>…どーせなら、もっと似せようか。</p>
<h4>#27</h4>
<p>◎TextViewのsetTextメソッドに、数値（intとかlongとか）を渡すと例外が発生する。</p>
<p>もーちょっとで完成なのに…。</p>
<h4>#28</h4>
<p>ソース中にコメントも入れ終わったし、ひとまず完成！！<br />
<a name="afterword"></a></p>
<h4>あとがき</h4>
<p>どんなアプリを作ったのかを簡単に書いておこうと思う。</p>
<p>【イメージ】<br />
<img class="size-full wp-image-1044" title="オリジナル第1弾アプリ「Mosaics」" src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/08/mosaics.png" alt="オリジナル第1弾アプリ「Mosaics」" width="245" height="329" /></p>
<p>【概要】</p>
<ul>
<li>『Mosaics』（モザイクス）というゲームアプリ。</li>
<li>『「何か」が25枚のモザイクによって隠されているので、それを制限時間内に当てる』のが目的。</li>
<li>モザイクは数秒おきに1枚ずつはがされていく。残り時間が少なくなると、モザイクの はがれ方も速くなる。</li>
<li>問題がスタートしてから正解するまでが早いほど高得点。得点は100点から減っていき、最低で-50点。</li>
<li>答えがわかれば、回答エリアのすぐ右にある白いボタンを押す。押すと回答モードに入り、タイマーが止まる。ボタンを押さなくても回答は入力できる。</li>
<li>判定ボタンを押すと、入力された回答がチェックされる。正解ならばモザイクが全部はずれて正解用メッセージが表示される。不正解ならばタイマーが再スタート。</li>
<li>こたえボタンを押すと問題終了（「制限時間内に正解できなかった」扱いになる）。</li>
</ul>
<p>【対応していない事】</p>
<ul>
<li>インターネットを用いた機能（逆に言えば、圏外でもアプリの動作は可能、なはず）</li>
<li>問題の追加（動的な問題データの追加方法が思い浮かばなかった。特にリソースオブジェクト系の追加について）</li>
<li>点数のセーブ（アプリを終了すると通算の獲得得点がクリアされる）</li>
<li>コンフィグ機能（最高点、最低点、タイマーの開始値、モザイクがめくれる速度 などの諸々の設定が不可）</li>
<li>国際化、メッセージのプロパティ化</li>
<li>「1000点を取ればミステリーツアーにご招待」とか「正解できないから檻から出られない」みたいなもの</li>
</ul>
<p>などなど</p>
<h4>次回予告</h4>
<p>次回は、自作アプリ第2弾の実装開始の場面から綴ります。<br />
ありがとうございました。</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html">アンドロイダー育成日記 -Androidと仲良くなるには- その1</a></li>
<li>アンドロイダー育成日記 -Androidと仲良くなるには- その2(本記事)</li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">アンドロイダー育成日記 -Androidと仲良くなるには- その3</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html" />
	</item>
		<item>
		<title>アンドロイダー育成日記 -Androidと仲良くなるには- その1</title>
		<link>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html#comments</comments>
		<pubDate>Mon, 17 Aug 2009 08:00:47 +0000</pubDate>
		<dc:creator>正木 恵二</dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[アンドロイド]]></category>
		<category><![CDATA[リンク集]]></category>
		<category><![CDATA[作業日誌]]></category>
		<category><![CDATA[初心者]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=1018</guid>
		<description><![CDATA[
このエントリーには続きがあります。
アンドロイダー育成日記 -Androidと仲良くなるには- その2

こんにちは。正木です。
GoogleがAndroidというプラットフォームを発表したのが、いまから2年近く前の2007年下旬。
その頃の私は「VBまっさかり」で、Visual Basic .NetかOracle以外の技術系の情報は、まったく無関心でした。
それから、時は過ぎました。
時流が変わり、世界の経済が変わり、日本の首相が変わり、日本の裁判が変わり、阪神タイガースの監督が変わり、私にも変化が起きて…。
手っ取り早い話が『Androidをさわりはじめた』というワケであります。最近になって。

そこで、でございます。
Android向けアプリ作成にあたり、したためていた私の作業日誌とやらを公開する次第であります。
実際のところ、現在は「これぞAndroidケータイにピッタリ！！」というようなアプリは作るコトができていません。
とか言いながら、読者ターゲットとしては、
・VBやってたんだけど、Androidにも興味がある！！
・VBもわかんないけど、Androidもわかんない！！
・Androidそこそこわかってるけど、初心に帰って学習したい！！
・僕だけ・私だけのアンドロイドを造りたい！！　　お茶の水さんのようになりたい！！
という感じで、なんだかんだで全方位に定めています。結構したたかです。
それでは、ど～ぞ～。
（※ 記事中の役立つ凡例 => ◎：役立つ教訓 &#124; ☆：役立つ外部リンク）
#1
不意に時間ができたので、Androidを触り始める事にした。
最初は、学習するなら『Ajaxとか使えるユーザビリティに優れたJavaフレームワークを使って何か作る！』と意気込んでいたが、ターゲットを探すのに時間がかかり断念した。
…正直に言えば、大事なところで優柔不断さが出た。
でもさぁ、Ajaxにそこまで深い執念がなかったから（時にはイイワケも必要）、
「どーせ時間があるんなら」と思い、漠然とカッコよく輝いて見えていたAndroidに手を出す事にした。
自作アプリで儲けてる人もいらっしゃるみたいだし、
そのうち出てくるであろうchromeOSを触る事になっても、今回の学習で多少のアドバンテージを得られるだろう、という、そんな策略もあったり。
ソースをダウンロードし、エミュレータが起動できる事を確認して、EclipseにAndroid開発用プラグインをインストールして、
Android開発用プロジェクトを作成し（Hello World的なソースが端っから実装されている）、それを実行させる手前まで完了。
「手前まで」と表現したのは、実行したけどうまくいかなかったため。
「SDKの存在が確認できません」だと。なにぃ？？
#2
『@IT』で、興味深い記事を発見。
「見えてきた!? ケータイ以外でのAndroidの適用例 － ＠IT MONOist」
　
何がすごいかって、記事中に出てくるカーナビみたいなヤツを「Androidを初めて触ったエンジニアが片手間で2週間程度で作り上げ」られるんだからすごい。
（カギカッコ内、リンク先より抜粋）
Androidを用いれば、「何を実現させたいか」と「実現方法」が『ある程度』頭に浮かぶだけで、アプリの量産体制に入るコトができるんだろうな、と。
（もっともAndroidだけではないだろうが、Android向けアプリはそういう風に持っていきやすいんだと思う。）
気分を切り替えて、引き続き「SDK失踪事件」の捜査を再開する。
#3
結果から言うと、事件は解決した。
犯人はこの中にいた。
たぶん…私。
はっきりとした理由はわからないけど、
正解を知りもせずに（お手本：Webでの解説サイトを見なかったり とか）、勘だけでやろうとしていたのが間違いだった気がする。
「Eclipse3.5」にアップデートしたり、ディレクトリ構成もWebサイトのお手本（下記リンク先参照）に倣いやってみたところ、
あっさりと「Hello, Android!!」が表示された。
上記の罪を償いながらも、
事件だの何だのと騒いだ割には、わりかし簡単に開発環境が整えられたように感じる。
◎Eclipseからエミュレータ実行コマンドを実行してから、アプリの起動が完了するまで、自分の開発環境だと20秒ぐらい要する（深く突っ込まず目安として捉えてください）。
◎エミュレータ実行時、エミュレータ画面の複数起動は不可。
☆Androidインストール &#8211; PukiWiki
☆Android開発環境のセットアップ &#8211; kariostroの日記

#4
『SoftwareDesign』を使いながら基礎を固めよう、とする。
（2009年3月号にAndroidの特集が組まれていた。2009年8月中旬現在、公式サイトによると同刊は品切れ状態。）
本に載っているサンプルゲームを、実装してみる。
そして、サンプルゲームを実装しつつ、おもしろコトバが本に載っていたのでちょっと紹介してみる。
◎『Androidアプリケーションは、ゲームであろうが何であろうが「画面に何かを表示する」プログラムであることがほとんどです。』（『SoftwareDesign』 2009年3月号より抜粋）
◎『理系の皆さんの大好きな(?)クイックソートと、理系でない皆さんの大好きな(?)バブルソート』（上記と同様）
#5
立体的に表示させる機能があるらしい。特殊なカードを使うみたい。
「なんじゃこりゃ」という驚きが、思わず声になった。
☆FrontPage &#8211; NyARToolkit
#6
「windowsキー + Break」→ 『システムのプロパティを起動』らしい。初めて知った。
#7
『SoftwareDesign』（#4 参照）に記載されていたソースを実装して、
実行させたら、期待している動きになった。
見事にうまくいってしまった。
「絶対にうまいこといくはずない」という直感を覆してまで…。
◎JavaファイルとXMLファイルの書き換えだけでうまくいった。
#8
『GeoPointAPI』のキー取得の為にやる、アカウントの登録ではまる。
「サービス名」とか「ドメイン」とか。サンプルアプリなのに、どう入力すればよいのだ！？
結局、頓挫。
☆シリウスラボのGeoPlatformAPI/GeoPointAPI
#9
暑い。
#10
AndroidアプリのGUIのデザインの定義は、XMLとして保持するらしい。
『どろいどどろう』とかいうヤツで、Visual Studioでのデザイン画面的にレイアウト用ソースの生成が可能。
☆DroidDraw : Graphical User Interface Editor for Android Cell Phone Development and Programming
（リンク先のようなアプレットではなく、クライアントアプリとしても「DroidDraw」は存在する。）
#11
VBでいうところの『テキストボックス・ラベル・ボタンをフォームに貼り付けて、ボタンを押下すると、テキストボックスへの入力値がラベルに反映される』というプログラムができた。
（AbsoluteLayoutの上にTextView・EditText・Buttonを設置して、ButtonのClickをフックする。Javaファイルに5行弱程度で実装可能。）
実現するために然程時間もかからず、またコーディング量も少なく済んで、感心している。
編集したのは、
・「デザイン用のXMLファイル」（res\layout\main.xml）
・「実処理を書いているJavaのメインクラス」（src\(任意のパッケージ)\(一番最初に生成されるクラス).java）
の2つだけ。
Javaのことだから、もっとXMLファイルがごちゃごちゃしてきたりするもんだと思っていたが、そーでもなかった。
☆Javaの学習ならJavaDriveのAndroid入門
次回予告
次回は自作アプリの実装について綴ります。
ありがとうございました。
あわせて読みたい

アンドロイダー育成日記 -Androidと仲良くなるには- その1(本記事)
アンドロイダー育成日記 -Androidと仲良くなるには- その2
アンドロイダー育成日記 -Androidと仲良くなるには- その3


]]></description>
			<content:encoded><![CDATA[<div class="update">
このエントリーには続きがあります。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a></p>
</div>
<p>こんにちは。正木です。</p>
<p>Googleが<a href="http://code.google.com/intl/ja/android/">Android</a>というプラットフォームを発表したのが、いまから2年近く前の2007年下旬。</p>
<p>その頃の私は「VBまっさかり」で、Visual Basic .NetかOracle以外の技術系の情報は、まったく無関心でした。</p>
<p>それから、時は過ぎました。<br />
時流が変わり、世界の経済が変わり、日本の首相が変わり、日本の裁判が変わり、阪神タイガースの監督が変わり、私にも変化が起きて…。</p>
<p>手っ取り早い話が『Androidをさわりはじめた』というワケであります。最近になって。<br />
<span id="more-1018"></span><br />
そこで、でございます。<br />
Android向けアプリ作成にあたり、したためていた私の作業日誌とやらを公開する次第であります。</p>
<p>実際のところ、現在は「これぞAndroidケータイにピッタリ！！」というようなアプリは作るコトができていません。</p>
<p>とか言いながら、読者ターゲットとしては、</p>
<p>・VBやってたんだけど、Androidにも興味がある！！<br />
・VBもわかんないけど、Androidもわかんない！！<br />
・Androidそこそこわかってるけど、初心に帰って学習したい！！<br />
・僕だけ・私だけのアンドロイドを造りたい！！　　お茶の水さんのようになりたい！！</p>
<p>という感じで、なんだかんだで全方位に定めています。結構したたかです。</p>
<p>それでは、ど～ぞ～。</p>
<p>（※ 記事中の役立つ凡例 => ◎：役立つ教訓 | ☆：役立つ外部リンク）</p>
<h4>#1</h4>
<p>不意に時間ができたので、Androidを触り始める事にした。</p>
<p>最初は、学習するなら『Ajaxとか使えるユーザビリティに優れたJavaフレームワークを使って何か作る！』と意気込んでいたが、ターゲットを探すのに時間がかかり断念した。</p>
<p>…正直に言えば、大事なところで優柔不断さが出た。</p>
<p>でもさぁ、Ajaxにそこまで深い執念がなかったから（時にはイイワケも必要）、<br />
「どーせ時間があるんなら」と思い、漠然とカッコよく輝いて見えていたAndroidに手を出す事にした。</p>
<p>自作アプリで儲けてる人もいらっしゃるみたいだし、<br />
そのうち出てくるであろうchromeOSを触る事になっても、今回の学習で多少のアドバンテージを得られるだろう、という、そんな策略もあったり。</p>
<p>ソースをダウンロードし、エミュレータが起動できる事を確認して、EclipseにAndroid開発用プラグインをインストールして、<br />
Android開発用プロジェクトを作成し（Hello World的なソースが端っから実装されている）、それを実行させる手前まで完了。</p>
<p>「手前まで」と表現したのは、実行したけどうまくいかなかったため。</p>
<p>「SDKの存在が確認できません」だと。なにぃ？？</p>
<h4>#2</h4>
<p>『@IT』で、興味深い記事を発見。</p>
<p><a href="http://monoist.atmarkit.co.jp/fembedded/articles/special/esec2009/report/android/esec2009_androida.html">「見えてきた!? ケータイ以外でのAndroidの適用例 － ＠IT MONOist」</a><br />
　<br />
何がすごいかって、記事中に出てくるカーナビみたいなヤツを「Androidを初めて触ったエンジニアが片手間で2週間程度で作り上げ」られるんだからすごい。<br />
（カギカッコ内、リンク先より抜粋）</p>
<p>Androidを用いれば、「何を実現させたいか」と「実現方法」が『ある程度』頭に浮かぶだけで、アプリの量産体制に入るコトができるんだろうな、と。<br />
（もっともAndroidだけではないだろうが、Android向けアプリはそういう風に持っていきやすいんだと思う。）</p>
<p>気分を切り替えて、引き続き「SDK失踪事件」の捜査を再開する。</p>
<h4>#3</h4>
<p>結果から言うと、事件は解決した。</p>
<p>犯人はこの中にいた。<br />
たぶん…私。</p>
<p>はっきりとした理由はわからないけど、<br />
正解を知りもせずに（お手本：Webでの解説サイトを見なかったり とか）、勘だけでやろうとしていたのが間違いだった気がする。</p>
<p>「Eclipse3.5」にアップデートしたり、ディレクトリ構成もWebサイトのお手本（下記リンク先参照）に倣いやってみたところ、<br />
あっさりと「Hello, Android!!」が表示された。</p>
<p>上記の罪を償いながらも、<br />
事件だの何だのと騒いだ割には、わりかし簡単に開発環境が整えられたように感じる。</p>
<p>◎Eclipseからエミュレータ実行コマンドを実行してから、アプリの起動が完了するまで、自分の開発環境だと20秒ぐらい要する（深く突っ込まず目安として捉えてください）。<br />
◎エミュレータ実行時、エミュレータ画面の複数起動は不可。<br />
☆<a href="http://kousei-inc.com/portal/index.php?Androidインストール">Androidインストール &#8211; PukiWiki</a><br />
☆<a href="http://d.hatena.ne.jp/kariostro/20090401/1238575662">Android開発環境のセットアップ &#8211; kariostroの日記</a><br />
<a name="story4"></a></p>
<h4>#4</h4>
<p>『SoftwareDesign』を使いながら基礎を固めよう、とする。<br />
（2009年3月号にAndroidの特集が組まれていた。2009年8月中旬現在、<a href="http://gihyo.jp/magazine/SD/archive/2009/200903">公式サイトによると同刊は品切れ状態</a>。）</p>
<p>本に載っているサンプルゲームを、実装してみる。</p>
<p>そして、サンプルゲームを実装しつつ、おもしろコトバが本に載っていたのでちょっと紹介してみる。</p>
<p>◎『Androidアプリケーションは、ゲームであろうが何であろうが「画面に何かを表示する」プログラムであることがほとんどです。』（『SoftwareDesign』 2009年3月号より抜粋）<br />
◎『理系の皆さんの大好きな(?)クイックソートと、理系でない皆さんの大好きな(?)バブルソート』（上記と同様）</p>
<h4>#5</h4>
<p>立体的に表示させる機能があるらしい。特殊なカードを使うみたい。</p>
<p>「なんじゃこりゃ」という驚きが、思わず声になった。</p>
<p>☆<a href="http://nyatla.jp/nyartoolkit/wiki/index.php?FrontPage">FrontPage &#8211; NyARToolkit</a></p>
<h4>#6</h4>
<p>「windowsキー + Break」→ 『システムのプロパティを起動』らしい。初めて知った。</p>
<h4>#7</h4>
<p>『SoftwareDesign』（<a href="#story4">#4</a> 参照）に記載されていたソースを実装して、<br />
実行させたら、期待している動きになった。</p>
<p>見事にうまくいってしまった。</p>
<p>「絶対にうまいこといくはずない」という直感を覆してまで…。</p>
<p>◎JavaファイルとXMLファイルの書き換えだけでうまくいった。</p>
<h4>#8</h4>
<p>『GeoPointAPI』のキー取得の為にやる、アカウントの登録ではまる。</p>
<p>「サービス名」とか「ドメイン」とか。サンプルアプリなのに、どう入力すればよいのだ！？</p>
<p>結局、頓挫。</p>
<p>☆<a href="http://lab.cirius.co.jp/">シリウスラボ</a>の<a href="http://lab.cirius.co.jp/index.php?GeoPlatformAPI/GeoPointAPI">GeoPlatformAPI/GeoPointAPI</a></p>
<h4>#9</h4>
<p>暑い。</p>
<h4>#10</h4>
<p>AndroidアプリのGUIのデザインの定義は、XMLとして保持するらしい。</p>
<p>『どろいどどろう』とかいうヤツで、Visual Studioでのデザイン画面的にレイアウト用ソースの生成が可能。</p>
<p>☆<a href="http://www.droiddraw.org/">DroidDraw : Graphical User Interface Editor for Android Cell Phone Development and Programming</a><br />
（リンク先のようなアプレットではなく、クライアントアプリとしても「DroidDraw」は存在する。）</p>
<h4>#11</h4>
<p>VBでいうところの『テキストボックス・ラベル・ボタンをフォームに貼り付けて、ボタンを押下すると、テキストボックスへの入力値がラベルに反映される』というプログラムができた。<br />
（AbsoluteLayoutの上にTextView・EditText・Buttonを設置して、ButtonのClickをフックする。Javaファイルに5行弱程度で実装可能。）</p>
<p>実現するために然程時間もかからず、またコーディング量も少なく済んで、感心している。</p>
<p>編集したのは、<br />
・「デザイン用のXMLファイル」（res\layout\main.xml）<br />
・「実処理を書いているJavaのメインクラス」（src\(任意のパッケージ)\(一番最初に生成されるクラス).java）<br />
の2つだけ。</p>
<p>Javaのことだから、もっとXMLファイルがごちゃごちゃしてきたりするもんだと思っていたが、そーでもなかった。</p>
<p>☆<a href="http://www.javadrive.jp/index.html">Javaの学習ならJavaDrive</a>の<a href="http://www.javadrive.jp/android/index.html">Android入門</a></p>
<h4>次回予告</h4>
<p>次回は自作アプリの実装について綴ります。<br />
ありがとうございました。</p>
<h3>あわせて読みたい</h3>
<ul>
<li>アンドロイダー育成日記 -Androidと仲良くなるには- その1(本記事)</li>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_02.html">アンドロイダー育成日記 -Androidと仲良くなるには- その2</a>
<li><a href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_03.html">アンドロイダー育成日記 -Androidと仲良くなるには- その3</a>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/android_beginner_diary_01.html" />
	</item>
		<item>
		<title>コマンドを便利に切り替える update-alternatives 使いこなし講座</title>
		<link>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html#comments</comments>
		<pubDate>Tue, 04 Aug 2009 04:00:39 +0000</pubDate>
		<dc:creator>白石 将</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[alternatives]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[update-alternatives]]></category>
		<category><![CDATA[コマンド]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=968</guid>
		<description><![CDATA[こんにちは、プロダクト&#38;サービス事業部の白石です。
唐突ですが、日本はよく豊かな国だと言われることがあります。
それは、ただ単に日本人の所得が高いというわけではなく選択の幅があるからです。
いざ美味しいものを食べたいなと思った時、
日本の料理はもちろんのこと、中華料理、韓国料理、イタリア料理などすぐに見つかります。
さらにちょっと手間を掛けて、大きな街中に足を運んだりするともっと多彩な国のグルメを楽しむことが出来ます。
また、こだわりのあるバーなんかに行くと世界中のお酒が並んでたりしますよね。
こういった選択の幅がある国って他にはなかなか無いそうですよ。
このように何かしようと思った時に、
色々あるものの中から好きなものを選べるのことはとても恵まれていることだと思いませんか?
そんな選択肢を文字通りLinuxに与えてくれるのが update-alternatives というコマンドです。
今回はCentOSでの検証を基に話をしますが、
CentOSの他に、Debian、RedHat系(RHEL、Fedora)にも
この update-alternatives という
シンボリックリンクを管理してデフォルトのコマンドを決定(man参照)するコマンド
があります。
簡単に言うと、複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンドです。
CentOSにSUNの Java を入れたことがある方は、一度は使ったことがあるのではないかと思います。
今回はこの update-alternatives コマンドについて解説したいと思います。

目次

update-alternatives とは
update-alternatives の使い方

グループのプログラムを切り替える
グループにプログラムを追加する
グループの状態を表示する
グループからプログラムを削除する
RedHat系ディストリビューションでは使えないオプション

スレーブとは
update-alternatives の簡単なファイル構成

alternatives ディレクトリ ( /etc/alternatives )
管理ディレクトリ ( /var/lib/alternatives )

共通オプション
まとめ
参考ドキュメント
おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする

使用したソフトウェアのバージョン
今回、使用したソフトウェアのバージョンは下記のようになります。



バージョン


CentOS
5.3 x86_64(インストール直後のもの)


update-alternatives
1.3.30.1


update-alternatives とは
長いので使い方のみを知りたい方はこの節は飛ばして、update-alternatives の使い方へどうぞ。
update-alternatives コマンドとは冒頭の通り、
複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド
です。

# which update-alternatives
/usr/sbin/update-alternatives
# ls -l /usr/sbin/update-alternatives
lrwxrwxrwx 1 root root 12  4月 25 02:02 /usr/sbin/update-alternatives -&#62; alternatives

どうやら、update-alternatives は /usr/sbin/alternatives へのシンボリックリンクのようです。
では、/usr/sbin/alternatives を見てみましょう。

# ls -l /usr/sbin/alternatives
-rwxr-xr-x 1 root root 26384  5月 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは、プロダクト&amp;サービス事業部の白石です。</p>
<p>唐突ですが、日本はよく豊かな国だと言われることがあります。<br />
それは、ただ単に日本人の所得が高いというわけではなく選択の幅があるからです。</p>
<p>いざ美味しいものを食べたいなと思った時、<br />
日本の料理はもちろんのこと、中華料理、韓国料理、イタリア料理などすぐに見つかります。<br />
さらにちょっと手間を掛けて、大きな街中に足を運んだりするともっと多彩な国のグルメを楽しむことが出来ます。<br />
また、こだわりのあるバーなんかに行くと世界中のお酒が並んでたりしますよね。<br />
こういった選択の幅がある国って他にはなかなか無いそうですよ。</p>
<p>このように何かしようと思った時に、<br />
色々あるものの中から好きなものを選べるのことはとても恵まれていることだと思いませんか?</p>
<p>そんな選択肢を文字通りLinuxに与えてくれるのが <a href="http://linux.die.net/man/8/update-alternatives"><span class="strong">update-alternatives</span></a> というコマンドです。</p>
<p>今回は<a href="http://www.centos.org/">CentOS</a>での検証を基に話をしますが、<br />
CentOSの他に、<a href="http://www.debian.or.jp/">Debian</a>、RedHat系(<a href="http://www.jp.redhat.com/">RHEL</a>、<a href="http://fedoraproject.org/ja/">Fedora</a>)にも<br />
この update-alternatives という</p>
<p><span class="strong">シンボリックリンクを管理してデフォルトのコマンドを決定(man参照)するコマンド</span></p>
<p>があります。<br />
簡単に言うと、<span class="strong">複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド</span>です。</p>
<p>CentOSに<a href="http://java.sun.com/javase/ja/6/download.html">SUNの Java </a>を入れたことがある方は、一度は使ったことがあるのではないかと思います。</p>
<p>今回はこの update-alternatives コマンドについて解説したいと思います。</p>
<p><span id="more-968"></span></p>
<h3 id="contents">目次</h3>
<ol>
<li><a href="#about_alternatives">update-alternatives とは</a></li>
<li><a href="#usage_alternatives">update-alternatives の使い方</a></li>
<ul>
<li><a href="#alternatives_config">グループのプログラムを切り替える</a></li>
<li><a href="#alternatives_install">グループにプログラムを追加する</a></li>
<li><a href="#alternatives_display">グループの状態を表示する</a></li>
<li><a href="#alternatives_remove">グループからプログラムを削除する</a></li>
<li><a href="#unusable_options">RedHat系ディストリビューションでは使えないオプション</a></li>
</ul>
<li><a href="#about_slave">スレーブとは</a></li>
<li><a href="#file_alternatives">update-alternatives の簡単なファイル構成</a></li>
<ul>
<li><a href="#alternatives_directory">alternatives ディレクトリ ( /etc/alternatives )</a></li>
<li><a href="#administration_directory">管理ディレクトリ ( /var/lib/alternatives )</a></li>
</ul>
<li><a href="#common_options">共通オプション</a></li>
<li><a href="#end">まとめ</a></li>
<li><a href="#documents">参考ドキュメント</a></li>
<li><a href="#bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</a></li>
</ol>
<h3 id="software_version">使用したソフトウェアのバージョン</h3>
<p>今回、使用したソフトウェアのバージョンは下記のようになります。</p>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th><a href="http://www.centos.org/">CentOS</a></th>
<td>5.3 x86_64(インストール直後のもの)</td>
</tr>
<tr>
<th><a href="http://linux.die.net/man/8/update-alternatives">update-alternatives</a></th>
<td>1.3.30.1</td>
</tr>
</table>
<h3 id="about_alternatives">update-alternatives とは</h3>
<p>長いので使い方のみを知りたい方はこの節は飛ばして、<a href="#usage_alternatives">update-alternatives の使い方</a>へどうぞ。</p>
<p>update-alternatives コマンドとは冒頭の通り、</p>
<p><span class="strong">複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド</span></p>
<p>です。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968109"><td class="code" id="p968code109"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which update-alternatives</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>update-alternatives
<span style="color: #666666; font-style: italic;"># ls -l /usr/sbin/update-alternatives</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">12</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:02 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>update-alternatives -<span style="color: #000000; font-weight: bold;">&gt;</span> alternatives</pre></td></tr></table></div>

<p>どうやら、update-alternatives は /usr/sbin/alternatives へのシンボリックリンクのようです。<br />
では、/usr/sbin/alternatives を見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968110"><td class="code" id="p968code110"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /usr/sbin/alternatives</span>
<span style="color: #660033;">-rwxr-xr-x</span> <span style="color: #000000;">1</span> root root <span style="color: #000000;">26384</span>  <span style="color: #000000;">5</span>月 <span style="color: #000000;">24</span>  <span style="color: #000000;">2008</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>alternatives</pre></td></tr></table></div>

<p>/usr/sbin/alternatives が本体みたいですね。<br />
ということは、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968111"><td class="code" id="p968code111"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives</span></pre></td></tr></table></div>

<p>とコマンドを実行するよりも、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968112"><td class="code" id="p968code112"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives</span></pre></td></tr></table></div>

<p>と実行した方が入力の手間が省けますが、<br />
CentOSの『man alternatives』では&#8221;UPDATE-ALTERNATIVES&#8221;となっているので、<br />
本エントリでは基本的に update-alternatives として話を進めることにします。</p>
<p>さて、この update-alternatives ですが、<br />
元はDebianの機能だったのが、現在ではRedHat系のディストリビューションにも移植されています。</p>
<p>今回、update-alternatives の機能を説明をするには、<br />
Java が適しているので Java をもとに簡単にどんな機能なのか見ていきたいと思います。</p>
<p>まずは Java の確認</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968113"><td class="code" id="p968code113"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which java</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.6.0&quot;</span>
OpenJDK  Runtime Environment <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.6.0-b09<span style="color: #7a0874; font-weight: bold;">&#41;</span>
OpenJDK <span style="color: #000000;">64</span>-Bit Server VM <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.6.0-b09, mixed mode<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>このことからCentOS 5.3には標準で <a href="http://openjdk.java.net/">OpenJDK</a> が入っていることが分かります。</p>
<p>けれど、実はCentOS 5.3にはデフォルトで Java が2種類入っており、<br />
update-alternatives の機能を利用して管理されています。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968114"><td class="code" id="p968code114"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>本来はステータスを参照する場合には <code>--display</code> オプションを使用するのですが、<br />
見やすさのため <code>--config</code> オプションを指定しました。</p>
<p>上記の結果から、</p>
<ol>
<li>update-alternatives で管理されている Java グループには OpenJDK と GCJ の2種類がある</li>
<li>プログラムは OpenJDK の方が選択されているっぽい</li>
</ol>
<p>ということが何となく分かると思います。</p>
<p>それでは update-alternatives の機能を使って Java グループのプログラムを切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968115"><td class="code" id="p968code115"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します: <span style="color: #000000;">2</span>    <span style="color: #000000; font-weight: bold;">&lt;</span>---- 入力<span style="color: #000000; font-weight: bold;">!!</span></pre></td></tr></table></div>

<p>では、もう一度 Java の確認を行ってみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968116"><td class="code" id="p968code116"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which java</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.4.2&quot;</span>
gij <span style="color: #7a0874; font-weight: bold;">&#40;</span>GNU libgcj<span style="color: #7a0874; font-weight: bold;">&#41;</span> version 4.1.2 20080704 <span style="color: #7a0874; font-weight: bold;">&#40;</span>Red Hat 4.1.2-44<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>C<span style="color: #7a0874; font-weight: bold;">&#41;</span> 2006 Free Software Foundation, Inc.
This is <span style="color: #c20cb9; font-weight: bold;">free</span> software; see the <span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #000000; font-weight: bold;">for</span> copying conditions.  There is NO
warranty; not even <span style="color: #000000; font-weight: bold;">for</span> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</pre></td></tr></table></div>

<p><span class="strong">同じ /usr/bin/java を実行している</span>はずなのにさっきと結果が変わりました!!</p>
<p>これは操作上では同じプログラムを実行しているようでも、<br />
実は update-alternatives が裏で頑張ってプログラムを切り替えてくれているからなんです。</p>
<p>このように</p>
<ul>
<li>複数のバージョンの同一のプログラム</li>
<li>同じジャンルに分類される複数のプログラム</li>
</ul>
<p>などを手軽に切り替えて使えるようにするのが update-alternatives の機能となります。</p>
<h3 id="usage_alternatives">update-alternatives の使い方</h3>
<p>update-alternatives の機能が何となく分かったところで使い方を見ていきましょう。</p>
<p>その前に動作モードと用語の説明をしておきます。</p>
<table class="content">
<caption>動作モード</caption>
<tr>
<th></th>
<th>解説</th>
</tr>
<tr>
<th>自動</th>
<td>update-alternatives が優先度で判断して選択肢を変更する状態。</td>
</tr>
<tr>
<th>手動</th>
<td>rootが行った設定を保持している状態</td>
</tr>
</table>
<table class="content">
<caption>用語</caption>
<tr>
<th></th>
<th>説明</th>
<th>記述例</th>
<tr>
<th>グループ名</th>
<td>update-alternatives で管理されるプログラムのグループ名</td>
<td>java</td>
</tr>
<tr>
<th>実行リンク</th>
<td>update-alternatives の機能を使ってプログラムを実行するためのパス</td>
<td>/usr/bin/java</td>
</tr>
<tr>
<th>プログラムパス</th>
<td>update-alternatives で管理するプログラム(ファイル)のパス</td>
<td>/usr/java/jdk1.6.0_14/bin/java</td>
</tr>
<tr>
<th>優先度</th>
<td>&#8220;自動モード&#8221;の場合、優先度が高いものが選択される</td>
<td>16014</td>
</tr>
</table>
<h4 id="alternatives_config">グループのプログラムを切り替える</h4>
<p>update-alternatives のグループで管理されているプログラムを切り替えます。</p>
<pre><code>update-alternatives --config グループ名
update-alternatives --auto グループ名
update-alternatives --set グループ名 プログラムパス</code></pre>
<p><a href="#about_alternatives">update-alternatives とは</a>での Java グループのプログラム切り替えと同様の手順となります。</p>
<p>では、 Java グループの選択プログラムを OpenJDK から GCJ に切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968117"><td class="code" id="p968code117"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します: <span style="color: #000000;">2</span>    <span style="color: #000000; font-weight: bold;">&lt;</span>---- 入力<span style="color: #000000; font-weight: bold;">!!</span></pre></td></tr></table></div>

<p>もしくは、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968118"><td class="code" id="p968code118"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --set java /usr/lib/jvm/jre-1.4.2-gcj/bin/java</span></pre></td></tr></table></div>

<p>とすることでも切り替わります。<br />
こちらは非対話形式なので、<br />
シェルスクリプトの中でグループの選択プログラムを切り替える際に重宝しそうです。</p>
<p>ちなみに上記の2通りの方法で選択プログラムを切り替えた場合、<br />
グループの動作モードは<span class="strong">&#8220;手動&#8221;</span>に変更されます。</p>
<p>逆に次の方法では、<br />
自動モードに変更することで<span class="strong">&#8220;優先度が最も高いプログラムを選択&#8221;</span>します。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968119"><td class="code" id="p968code119"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --auto java</span></pre></td></tr></table></div>

<p>&#8220;自動&#8221;モードに設定されることにより、<br />
選択されるプログラムが自動で update-alternatives によって決められることになり<span class="strong">優先度の最も高いものが選択</span>されます。</p>
<h4 id="alternatives_install">グループにプログラムを追加する</h4>
<p>指定したプログラムを update-alternatives のグループに追加します。</p>
<pre><code>update-alternatives --install 実行リンク グループ名 プログラムパス 優先度</code></pre>
<p><a href="http://java.sun.com/javase/ja/6/download.html">SUNの JDK1.6.0_update14</a>(以下jdk1.6.0_14) が /usr/java にインストール済みである状態とします。　</p>
<p><a href="#bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</a></p>

<div class="wp_codebox"><table width="100%" ><tr id="p968120"><td class="code" id="p968code120"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_14/bin/java 16014</span></pre></td></tr></table></div>

<p>何も表示されなかった場合にはグループにプログラムが追加されているはずです。</p>
<p>では早速、update-alternatives で管理されている Java グループのリストを見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968121"><td class="code" id="p968code121"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">3</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
   <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
 + <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #000000; font-weight: bold;">*</span>  <span style="color: #000000;">3</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>Java グループの中に jdk1.6.0_14 が追加されているのが確認出来ました。</p>
<h4 id="alternatives_display">グループの状態を表示する</h4>
<p>update-alternatives で管理されているプログラムの状態を表示します。</p>
<pre><code>update-alternatives --display グループ名</code></pre>
<p>Java グループの詳細を見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968122"><td class="code" id="p968code122"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --display java</span>
java - ステータスは手動です。
リンクは現在 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java を指しています。
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">16000</span>
 スレーブ keytool: <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>keytool
    ～中略～
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">1420</span>
 スレーブ keytool: <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>keytool
    ～中略～
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">16014</span>
 スレーブ keytool: <span style="color: #7a0874; font-weight: bold;">&#40;</span>null<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    ～中略～
現在の「最適」バージョンは <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java です。</pre></td></tr></table></div>

<p>以上のような詳細な状態の確認をすることができます。</p>
<p><code>--display</code> オプションで確認できる内容は、</p>
<ul>
<li>現在の動作モード</li>
<li>現在グループで選択されているプログラム</li>
<li>グループに登録されているプログラムとその優先度</li>
<li>プログラムに関連付けられているスレーブ(後述)</li>
<li>自動モード時に選択されるプログラム</li>
</ul>
<p>となります。</p>
<p>上記の実行結果から、</p>
<ul>
<li>OpenJDK と GCJ と jdk1.6.0_14 の計3種類の Java が update-alternatives で管理されている</li>
<li>OpenJDK の優先度は&#8221;16000&#8243;</li>
<li>GCJ の優先度は&#8221;1420&#8243;</li>
<li>jdk1.6.0_14 の優先度は&#8221;16014&#8243;</li>
<li>現在の動作モードは&#8221;手動&#8221;</li>
<li>現在、jdk1.6.0_14が選択されている</li>
<li>各スレーブの状態</li>
<li>自動モードにした場合、jdk1.6.0_14 が選択される(最適バージョン)</li>
</ul>
<p>ということが読み取れます。</p>
<h4 id="alternatives_remove">グループからプログラムを削除する</h4>
<p>グループに追加済みのプログラムをグループから削除します。</p>
<pre><code>update-alternatives --remove グループ名 プログラムパス</code></pre>
<p>それでは、jdk1.6.0_14 を削除してみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968123"><td class="code" id="p968code123"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --remove java /usr/java/jdk1.6.0_14/bin/java</span></pre></td></tr></table></div>

<p>きちんと削除されたか確認してみます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968124"><td class="code" id="p968code124"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>  <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
 + <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>きちんとプログラムパスで指定したものが消えていますね。</p>
<p>グループからプログラムを削除する際に、<br />
&#8220;自動&#8221;モードの場合、選択中のプログラムを削除した場合には、update-alternatives が優先度の大きいものに自動で変更します。<br />
&#8220;手動&#8221;モードの場合には、プログラム情報を削除するだけで選択情報は変更されないみたいです。<br />
また削除後に選択すべきプログラムが無い場合にはグループが削除されます。</p>
<p>ちなみに、プログラムパスを間違えると次のように怒られちゃいます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968125"><td class="code" id="p968code125"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --remove java /usr/java/jdk1.6.0_14/</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span> は java の為の互換用として設定されていません。</pre></td></tr></table></div>

<h4 id="unusable_options">RedHat系ディストリビューションでは使えないオプション</h4>
<p>Debianにはあっても、<br />
残念ながらRedHat系ディストリビューションでは使えないオプションがあるようです。</p>
<table class="content">
<caption>RedHat系ディストリビューションでは使えないオプション</caption>
<tr>
<th><code>--list</code></th>
<td>グループ内の管理プログラムを一覧表示する</td>
</tr>
<tr>
<th><code>--remove-all</code></th>
<td>グループごと削除する</td>
</tr>
<tr>
<th><code>--all</code></th>
<td>すべてのグループにたいして <code>--config</code> オプションを呼び出す</td>
</tr>
</table>
<p>使い道の思い浮かばない <code>--all</code> オプションはともかく、<br />
個人的に <code>--list</code> オプションは欲しかったように思います。<br />
<code>--display</code> オプションがありますが、<br />
グループ内のプログラムを参照するだけであれば <code>--config</code> オプションで見た方が視認性が高いかと思います。</p>
<h3 id="about_slave">スレーブとは</h3>
<p>簡単に言ってしまうと、</p>
<p><span class="strong">グループの選択プログラムが変更されると、スレーブとして登録されたプログラムも同時に変更する</span></p>
<p>機能です。</p>
<pre><code>update-alternatives --install 実行リンク グループ名 プログラムパス --slave 実行リンク グループ名 プログラムパス</code></pre>
<p>では今までの流れから、<br />
既に jdk1.6.0_14 が入ってる状態に、<br />
更に <a href="http://java.sun.com/j2se/1.5.0/ja/download.html">JDK1.5.0_update19</a>(以下jdk1.5.0_19) を入れてスレーブ機能を使ってみましょう。</p>
<p>jdk1.5.0_19 をインストールする際に、<br />
既に jdk1.6.0_14 をRPMパッケージでインストールしている場合、<br />
古いバージョンをRPMパッケージでインストール出来ないので、<br />
RPMパッケージを使わずに jdk-1_5_0_19-linux-amd64.bin を展開し /usr/java に配置します。</p>
<p>配置出来たら、jdk1.5.0_19 も update-alternatives で管理させます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968126"><td class="code" id="p968code126"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019</span></pre></td></tr></table></div>

<p>では、早速 jdk1.5.0_19 に切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968127"><td class="code" id="p968code127"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --config java</span>
&nbsp;
<span style="color: #000000;">4</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
   <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">3</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">4</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:<span style="color: #000000;">4</span></pre></td></tr></table></div>

<p>早速 Java のバージョンを確認。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968128"><td class="code" id="p968code128"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.5.0_19&quot;</span>
Java<span style="color: #7a0874; font-weight: bold;">&#40;</span>TM<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">2</span> Runtime Environment, Standard Edition <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.5.0_19-b02<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Java HotSpot<span style="color: #7a0874; font-weight: bold;">&#40;</span>TM<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">64</span>-Bit Server VM <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.5.0_19-b02, mixed mode<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>うまく切り替わっているのが確認出来ますね。</p>
<p>しかし、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968129"><td class="code" id="p968code129"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># javac -version</span>
javac 1.6.0_14</pre></td></tr></table></div>

<p>Java はうまく切り替わっていても、<br />
javac は jdk1.6.0_14 のものを使ってしまっています。</p>
<p>javac をはじめ、jar や javadoc など Java の変更に伴って同時に変更したいプログラムがいくつかあります。<br />
一つ一つを丁寧に update-alternatives に登録 &#8211;> 変更と繰り返すことで解決はしますが、<br />
Java を切り替える度にいくつものその他プログラムを切り替えるのは少々骨が折れる作業となります。</p>
<p>そんな時に活用したいのがスレーブ機能です。</p>
<p>スレーブ機能とは最初に紹介した通り、</p>
<p><span class="strong">グループの選択プログラムが変更されると、スレーブとして登録されたプログラムを同時に変更する</span></p>
<p>です。</p>
<p>なんだか今回の事例にピッタリな機能ですよね。</p>
<p>では、早速スレーブ機能を使ってみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968130"><td class="code" id="p968code130"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019\</span>
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac javac <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac</pre></td></tr></table></div>

<p><code>--install</code> オプションでの追加時に <code>--slave</code> オプションを設定するだけです。<br />
(既にグループにプログラムが登録済みでも上書き出来ます。)</p>
<p>これでスレーブを保持する jdk1.5.0_19 の追加が出来ました。</p>
<p>では、早速 update-alternatives で jdk1.5.0_19 に切り替えて、<br />
javac がどうなっているか確認してみましょう。<br />
(既に jdk1.5.0_19 の場合は、他に変更後、再度 jdk1.5.0_19 に変更してください)</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968131"><td class="code" id="p968code131"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># javac -version</span>
javac 1.5.0_19</pre></td></tr></table></div>

<p>javac も Java と一緒に更新されていることが確認できました。</p>
<p>このスレーブは <code>--install</code> オプションの設定時に何個でも登録することが出来ます。<br />
複数個の登録の場合には、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968132"><td class="code" id="p968code132"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019\</span>
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>jar jar <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>jar\
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac javac <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac\
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javadoc javadoc <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javadoc</pre></td></tr></table></div>

<p>のように実行してください。</p>
<p>自分で必要なだけスレーブを追加出来るので、<br />
記述は冗長になってしまいますが毎回1つ1つを変更していくよりもはるかに効率的ですね。</p>
<p>ちなみに、<br />
上記の javac の設定だけだと jdk1.6.0_14 に戻した際に、<br />
javac は変更されないので、<br />
jdk1.6.0_14 にも同様に javac などスレーブを設定する必要があります。</p>
<h3 id="file_alternatives">update-alternatives の簡単なファイル構成</h3>
<p>ここでは簡単な update-alternatives のファイル構成を解説したいと思います。</p>
<h4 id="alternatives_directory">alternatives ディレクトリ ( /etc/alternatives )</h4>
<p>update-alternatives の Java グループでどのJavaが選択されていても、<br />
一様に /usr/bin/java を操作すれば問題無く任意の Java を実行することが出来ました。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968133"><td class="code" id="p968code133"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /usr/bin/java</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">22</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:04 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>alternatives<span style="color: #000000; font-weight: bold;">/</span>java</pre></td></tr></table></div>

<p>この /usr/bin/java が /etc/alternatives/java のシンボリックリンクであることが分かります。</p>
<p>では /etc/alternatives/java も見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968134"><td class="code" id="p968code134"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /etc/alternatives/java</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">30</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>alternatives<span style="color: #000000; font-weight: bold;">/</span>java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java</pre></td></tr></table></div>

<p>この /etc/alternatives/java が、<br />
グループで選択されたプログラムの実体のシンボリックリンクになっていることが分かります。</p>
<p>つまり、update-alternatives は、<br />
選択したプログラムのシンボリックリンクを作り替えてプログラムを切り替えているみたいですね。</p>
<p>プログラムを実行すると、</p>
<p><span class="strong">実行リンク &#8212;-> /etc/alternatives/グループ名 &#8212;-> プログラムパス</span></p>
<p>のようにプログラム本体を参照しているということになります。</p>
<p>ちなみに /etc/alternatives 以下を参照してみると、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968135"><td class="code" id="p968code135"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /etc/alternatives/</span>
合計 <span style="color: #000000;">80</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">19</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:06 antlr -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>antlr-java
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">30</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">31</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> javac -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac
    ～後略～</pre></td></tr></table></div>

<p>スレーブで設定した javac もこちらで切り替えるためにシンボリックリンクになっているのが分かります。</p>
<p>この alternatives ディレクトリは、<br />
<code>--altdir</code> オプションにより /etc/alternatives から別のディレクトリに変更することが出来ます。</p>
<h4 id="administration_directory">管理ディレクトリ ( /var/lib/alternatives )</h4>
<p>プログラムを切り替える仕組みは alternatives ディレクトリで確認出来ますが、<br />
グループのモードやスレーブの関係などの情報は管理ディレクトリを見ることで確認することが出来ます。</p>
<p>例えば、Java グループの各情報は /var/lib/alternatives/java にテキストで格納されています。</p>
<p>この管理ファイルの細かいフォーマット形式はよく分かりませんが、<br />
中身はテキストでそのままのことが書いてあるので何となくの情報は読み取れます。</p>
<p>この管理ディレクトリをよく見ると、<br />
スレーブで設定されたグループ(本エントリでは javac)の情報ファイルは作成されていないようですね。</p>
<p>ちなみにこの 管理ディレクトリは、<br />
<code>--admindir</code> オプションにより /var/lib/alternatives から別のディレクトリに変更することが出来ます。</p>
<h3 id="common_options">共通オプション</h3>
<p>管理プログラムの操作(アクション)について一通り説明しましたが、<br />
ここでは全アクションに対応する共通オプションについて解説します。</p>
<table class="content">
<tr>
<th><code>--verbose</code></th>
<td>詳細な情報を表示します。</td>
</tr>
<tr>
<th><code>--quiet</code></th>
<td>エラー以外の情報を表示しません。<span class="red">未実装</span></td>
</tr>
<tr>
<th><code>--test</code></th>
<td>指定した操作をテストします。実際には何も更新されません。<span class="red">未実装</span></td>
</tr>
<tr>
<th><code>--help</code></th>
<td>update-alternatives に関する簡単な使用方法を表示します。</td>
</tr>
<tr>
<th><code>--altdir</code> directory</th>
<td>alternativesディレクトリ(デフォルト : /etc/alternatives(alternatives)を指定したディレクトリに変更します。</td>
</tr>
<tr>
<th><code>--admindir</code> directory</th>
<td>管理ディレクトリ(デフォルト : /var/lib/alternatives)を指定したディレクトリに変更します。</td>
</tr>
</table>
<h3 id="end">まとめ</h3>
<p>さて、ひたすら update-alternatives について説明してみましたがいかがだったでしょうか?</p>
<p>意外と簡単だけど案外知らない人も多い update-alternatives コマンド。<br />
上手に使いこなせれば良い武器になると思います。</p>
<p>ここで、僕のもっぱらの使い方を紹介しましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968136"><td class="code" id="p968code136"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config 彼女</span>
&nbsp;
致命的なエラー : 何も登録されていません<span style="color: #000000; font-weight: bold;">!!!</span></pre></td></tr></table></div>

<p><span class="strong">･･･････････orz</span></p>
<h3 id="documents">参考文献</h3>
<ul>
<li><a href="http://linux.die.net/man/8/update-alternatives">update-alternatives(8) &#8211; Linux man page</a></li>
<li><a href="http://www.pinkdragon.net/DocumentsLibrary/contents/ja/Linux_man/update-alternatives.8.html">Linux man &#8211; update-alternatives</a>(Debianのmanですが日本語に翻訳されています)</li>
</ul>
<h3 id="bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</h3>
<p>簡単に僕がSUNのJDKをインストールする手順を紹介します。</p>
<p>jdk1.6.0_14 のファイルのURIを<a href="http://java.sun.com/javase/ja/6/download.html">SUNのサイト</a>から拾ってきます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968137"><td class="code" id="p968code137"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># cd /usr/local/src</span>
<span style="color: #666666; font-style: italic;"># wget http://cds.sun.com/ ～中略～ /FileName=/jdk-6u14-linux-x64-rpm.bin</span>
名前が長いのでリネーム
<span style="color: #666666; font-style: italic;"># mv jdk-6u14-linux-x64-rpm.bin\ ～中略～ \jdk-6u14-linux-x64-rpm.bin jdk-6u14-linux-x64-rpm.bin</span>
<span style="color: #666666; font-style: italic;"># chmod u+x jdk-6u14-linux-x64-rpm.bin</span>
<span style="color: #666666; font-style: italic;"># ./jdk-6u14-linux-x64-rpm.bin</span></pre></td></tr></table></div>

<p>これで /usr/java に jdk1.6.0_14 がインストールされます。</p>
<p>環境変数を設定する場合は ~/.bash_profile に</p>

<div class="wp_codebox"><table width="100%" ><tr id="p968138"><td class="code" id="p968code138"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">JAVA_HOME</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>default
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #007800;">$PATH</span>:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">CLASSPATH</span>=.:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>jre<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>tools.jar</pre></td></tr></table></div>

<p>とでも記述しておくと良い感じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/update-alternatives.html" />
	</item>
		<item>
		<title>SeleniumRCで自己署名証明書使用のWEBアプリケーションをテストする際、セキュリティ警告を表示させない方法</title>
		<link>http://blog.eni.co.jp/tech/2009/07/selenium_firefox_self_signed_ssl.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/07/selenium_firefox_self_signed_ssl.html#comments</comments>
		<pubDate>Thu, 23 Jul 2009 01:33:58 +0000</pubDate>
		<dc:creator>笹山 昭秀</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[テスト]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Profile]]></category>
		<category><![CDATA[自動テスト]]></category>
		<category><![CDATA[自己署名証明書]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=901</guid>
		<description><![CDATA[こんにちは。プロダクト&#38;サービス事業部の笹山です。
前回のブログ(Seleniumの自動テストを止めることなく、Flexを手動操作する方法)で「FlashSeleniumについて調査をして、このブログに公開できたら・・・」などと書きましたが、全く調査できておりません。お詫び申し上げます。
前回のブログ執筆時後、SeleniumRCのバージョンも1.0.1に上がっていますし、FlashSeleniumもSeleniumRC1.0互換のものが出ているようです。
ですから、現時点では「あっさり動いてしまう？」のかもしれません。
今回もSeleniumRCネタではありますが「SeleniumRCで自己署名証明書使用のWEBアプリケーションをテストする際、Firefoxからのセキュリティ警告を表示させない方法」について書きたいと思います。

自己署名証明書使用のWEBアプリケーションをテストする際の問題
SSL対応のWEBアプリケーションのテストを行う際に、自己署名証明書を作成してテストすることは多いと思います。
SeleniumRCで自己署名証明書使用のWEBアプリケーションのテストを行うことはもちろん可能です。
しかし、面倒くさい操作が発生してしまうのです。
サーバに接続する際に、「信頼できない接続 &#8211; 接続の安全性を確認できません」と警告が出ます。
例外として追加しても毎回警告が表示され、そのたびに例外に追加する操作を行わなければいけません。
これでは、SeleniumRCを用いての自動テストの意味がありません。
問題の解決方法
これを解決する方法が分かりました。ただしFirefoxでのみです。
FirefoxでSeleniumServer用のProfileを作成し、SeleniumServer起動時にそのProfileを指定させれば良いのです。
それでは、まず最初にFirefoxでSeleniumServer用のProfileを作成する手順について説明します。
SeleniumServer用のProfile作成手順

アクセサリ-ファイル名を指定して実行でFirefoxのProfileManagerを起動します
firefox.exe -ProfileManager

「新しいプロファイルを作成」でSelenium用のプロファイルを作成します

プロファイル作成ウィザードで順番に作成していきます
※安全のため保存先は、Selenium用のフォルダを作成し、そのフォルダを指定することをお勧めします

Selenium用のプロファイル作成後、作成したプロファイルを指定して自己署名証明書使用のサイトにアクセスします
「信頼できない接続 &#8211; 接続の安全性を確認できません」と警告が出ます

自己署名証明書使用のサイトを例外として追加し、セキュリティ例外を承認します


後にも先にも、Firefoxで自己署名証明書使用のサイトを例外として追加する操作はこの1回だけです。
次に、SeleniumServerへProfileを指定する方法を説明します。
JUnitテストソースでSeleniumServer起動時にProfileを指定させるコード
使用するProfileを指定して、SeleniumServerを起動するコードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 自己署名証明書使用のURL
testUrl = &#34;https://localhost:8443&#34;;
&#160;
// テストを行うブラウザ
testBrowser = &#34;*firefox&#34;;
&#160;
// SeleniumServerのインスタンス化
seleniumServer = new SeleniumServer&#40;&#41;;
&#160;
// Selenium用プロファイルの指定 --------- ここから -------------
RemoteControlConfiguration config = seleniumServer.getConfiguration&#40;&#41;;
config.setFirefoxProfileTemplate&#40;new File&#40;&#34;D:\\firefox_selenium&#34;&#41;&#41;;
// Selenium用プロファイルの指定 --------- ここまで -------------
&#160;
// SeleniumServerの起動
seleniumServer.start&#40;&#41;;
&#160;
// seleniumClientを起動
selenium = new DefaultSelenium&#40;&#34;localhost&#34;, 4444, testBrowser, testUrl&#41;;
selenium.start&#40;&#41;;

selenium-server.jarファイル実行時にProfileを指定させる方法
上記のJUnitのテストケースではなく、別途SeleniumServerを起動してテストを行う場合は、以下のコマンドを実行してください。
java -jar selenium-server.jar -firefoxProfileTemplate d:\\selenium-firefox
最後に
これで通常通りSeleniumRCで自動テストを実行すると、わずらわしい警告は出なくなるはずです。
Firefoxのみの対処方法でしたが、IEやその他ブラウザでの解決方法はまだ分かっていません。
調査を続行していこうと思っています。（FlashSeleniumの調査も忘れずに！）
あわせて読みたい
Seleniumの自動テストを止めることなく、Flexを手動操作する方法
]]></description>
			<content:encoded><![CDATA[<p>こんにちは。プロダクト&amp;サービス事業部の笹山です。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/05/selenium_wait.html">前回のブログ</a>(<a href="http://blog.eni.co.jp/tech/2009/05/selenium_wait.html">Seleniumの自動テストを止めることなく、Flexを手動操作する方法</a>)で「FlashSeleniumについて調査をして、このブログに公開できたら・・・」などと書きましたが、全く調査できておりません。お詫び申し上げます。</p>
<p><a href="http://blog.eni.co.jp/tech/2009/05/selenium_wait.html">前回のブログ</a>執筆時後、<a title="Selenium" href="http://seleniumhq.org/" target="_blank">SeleniumRC</a>のバージョンも1.0.1に上がっていますし、<a title="FlashSelenium" href="http://code.google.com/p/flash-selenium/downloads/list" target="_blank">FlashSelenium</a>もSeleniumRC1.0互換のものが出ているようです。<br />
ですから、現時点では「あっさり動いてしまう？」のかもしれません。</p>
<p>今回もSeleniumRCネタではありますが「SeleniumRCで自己署名証明書使用のWEBアプリケーションをテストする際、Firefoxからのセキュリティ警告を表示させない方法」について書きたいと思います。<br />
<span id="more-901"></span></p>
<h3>自己署名証明書使用のWEBアプリケーションをテストする際の問題</h3>
<p>SSL対応のWEBアプリケーションのテストを行う際に、自己署名証明書を作成してテストすることは多いと思います。</p>
<p>SeleniumRCで自己署名証明書使用のWEBアプリケーションのテストを行うことはもちろん可能です。<br />
しかし、面倒くさい操作が発生してしまうのです。</p>
<p>サーバに接続する際に、「信頼できない接続 &#8211; 接続の安全性を確認できません」と警告が出ます。<br />
<div id="attachment_895" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_ssl.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_ssl-300x183.png" alt="警告 - 信頼できない接続" title="警告 - 信頼できない接続" width="300" height="183" class="size-medium wp-image-895" /></a><p class="wp-caption-text">警告 - 信頼できない接続</p></div></p>
<p>例外として追加しても毎回警告が表示され、そのたびに例外に追加する操作を行わなければいけません。<br />
これでは、SeleniumRCを用いての自動テストの意味がありません。</p>
<h3 class="caption">問題の解決方法</h3>
<p>これを解決する方法が分かりました。ただしFirefoxでのみです。<br />
FirefoxでSeleniumServer用のProfileを作成し、SeleniumServer起動時にそのProfileを指定させれば良いのです。</p>
<p>それでは、まず最初にFirefoxでSeleniumServer用のProfileを作成する手順について説明します。</p>
<h3>SeleniumServer用のProfile作成手順</h3>
<ol>
<li>アクセサリ-ファイル名を指定して実行でFirefoxのProfileManagerを起動します<br />
<div id="attachment_896" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/exec_firefox_profilemanger.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/exec_firefox_profilemanger-300x178.png" alt="ファイル名を指定して実行 - ProfileManager" title="ファイル名を指定して実行 - ProfileManager" width="300" height="178" class="size-medium wp-image-896" /></a><p class="wp-caption-text">ファイル名を指定して実行 - ProfileManager</p></div></p>
<pre>firefox.exe -ProfileManager</pre>
</li>
<li>「新しいプロファイルを作成」でSelenium用のプロファイルを作成します<br />
<div id="attachment_897" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_profilemanager_add_profile.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_profilemanager_add_profile-300x173.png" alt="新しいプロファイルを作成" title="新しいプロファイルを作成" width="300" height="173" class="size-medium wp-image-897" /></a><p class="wp-caption-text">新しいプロファイルを作成</p></div>
</li>
<li>プロファイル作成ウィザードで順番に作成していきます<br />
<span style="color: #ff0000;">※安全のため保存先は、Selenium用のフォルダを作成し、そのフォルダを指定することをお勧めします</span><br />
<div id="attachment_898" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_profilemanager_wizard.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_profilemanager_wizard-300x226.png" alt="プロファイル作成ウィザード" title="プロファイル作成ウィザード" width="300" height="226" class="size-medium wp-image-898" /></a><p class="wp-caption-text">プロファイル作成ウィザード</p></div>
</li>
<li>Selenium用のプロファイル作成後、作成したプロファイルを指定して自己署名証明書使用のサイトにアクセスします<br />
「信頼できない接続 &#8211; 接続の安全性を確認できません」と警告が出ます<br />
<div id="attachment_895" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_ssl.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_ssl-300x183.png" alt="警告 - 信頼できない接続" title="警告 - 信頼できない接続" width="300" height="183" class="size-medium wp-image-895" /></a><p class="wp-caption-text">警告 - 信頼できない接続</p></div>
</li>
<li>自己署名証明書使用のサイトを例外として追加し、セキュリティ例外を承認します<br />
<div id="attachment_900" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_exception_site.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_warn_exception_site-300x253.png" alt="例外として追加" title="例外として追加" width="300" height="253" class="size-medium wp-image-900" /></a><p class="wp-caption-text">例外として追加</p></div></p>
<p><div id="attachment_899" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_add_exception_site.png"><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/07/firefox_add_exception_site-300x300.png" alt="セキュリティ例外を承認" title="セキュリティ例外を承認" width="300" height="300" class="size-medium wp-image-899" /></a><p class="wp-caption-text">セキュリティ例外を承認</p></div>
</li>
</ol>
<p>後にも先にも、Firefoxで自己署名証明書使用のサイトを例外として追加する操作はこの1回だけです。</p>
<p>次に、SeleniumServerへProfileを指定する方法を説明します。</p>
<h3>JUnitテストソースでSeleniumServer起動時にProfileを指定させるコード</h3>
<p>使用するProfileを指定して、SeleniumServerを起動するコードです。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p901140"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p901code140"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// 自己署名証明書使用のURL</span>
testUrl <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;https://localhost:8443&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// テストを行うブラウザ</span>
testBrowser <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;*firefox&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// SeleniumServerのインスタンス化</span>
seleniumServer <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SeleniumServer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Selenium用プロファイルの指定 --------- ここから -------------</span>
RemoteControlConfiguration config <span style="color: #339933;">=</span> seleniumServer.<span style="color: #006633;">getConfiguration</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
config.<span style="color: #006633;">setFirefoxProfileTemplate</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;D:<span style="color: #000099; font-weight: bold;">\\</span>firefox_selenium&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Selenium用プロファイルの指定 --------- ここまで -------------</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// SeleniumServerの起動</span>
seleniumServer.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// seleniumClientを起動</span>
selenium <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultSelenium<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span>, 4444, testBrowser, testUrl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
selenium.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>selenium-server.jarファイル実行時にProfileを指定させる方法</h3>
<p>上記のJUnitのテストケースではなく、別途SeleniumServerを起動してテストを行う場合は、以下のコマンドを実行してください。</p>
<pre>java -jar selenium-server.jar -firefoxProfileTemplate d:\\selenium-firefox</pre>
<h3>最後に</h3>
<p>これで通常通りSeleniumRCで自動テストを実行すると、わずらわしい警告は出なくなるはずです。</p>
<p>Firefoxのみの対処方法でしたが、IEやその他ブラウザでの解決方法はまだ分かっていません。<br />
調査を続行していこうと思っています。（FlashSeleniumの調査も忘れずに！）</p>
<h3>あわせて読みたい</h3>
<p><a href="http://blog.eni.co.jp/tech/2009/05/selenium_wait.html">Seleniumの自動テストを止めることなく、Flexを手動操作する方法</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/07/selenium_firefox_self_signed_ssl.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/07/selenium_firefox_self_signed_ssl.html" />
	</item>
		<item>
		<title>Solr/SolrJ1.3のCoreAdmin(マルチコア)機能を用いて動的にCoreを追加する方法(SolrJのバグの対処方法)</title>
		<link>http://blog.eni.co.jp/tech/2009/07/apache_solr_13_coreadmin_multicore_solved.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/07/apache_solr_13_coreadmin_multicore_solved.html#comments</comments>
		<pubDate>Wed, 15 Jul 2009 06:38:05 +0000</pubDate>
		<dc:creator>kubo@eni.co.jp</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[全文検索]]></category>
		<category><![CDATA[CoreAdmin]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[SolrJ]]></category>
		<category><![CDATA[マルチコア]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=863</guid>
		<description><![CDATA[こんにちは。
株式会社イージーネット プロダクト&#038;サービス事業部 の久保です。
前回書いたSolrの記事 全文検索サーバ: これからSolrを始める人のためのApache Solr概要と便利なリンク集 はおかげさまで沢山のアクセス/ブックマークをいただきました。
来週火曜日の7/21には、Lucene/Solrで有名なロンウイットの関口さん(参考: 関口宏司のLuceneブログ)などが参加されるSolr勉強会も開催されるようですので、Solr人気は高まっているのかもしれません。
今回は前回から変わって小さなネタになりますが、
Solr/SolrJ1.3のCoreAdmin(マルチコア)機能を用いて動的にCoreを追加する際にはまるSolrJのバグと、その対処方法について書きます。

Solr1.3のマルチコア機能とは
単純に言うと、1つのSolrアプリケーション(サーブレットアプリケーション)の上で、論理的に複数のSolrアプリケーションを動かすことができる機能です。
詳しくは前回の記事の「マルチコア構成」をご覧ください。
Coreを追加するためのURL(Query String)
Coreを追加するのに必要なURL(Query String)は次のようになります。
(参考URL: Solr Wiki &#8211; CoreAdmin)

http://server/solr/admin/cores?action=CREATE&#38;name=[name]&#38;instanceDir=[dir]&#38;config=[solrconfig]&#38;schema=[schema]

(例)

http://testserver:8080/solr/admin/cores?action=CREATE&#38;name=test&#38;instanceDir=test&#38;config=/solr/conf/solrconfig.xml&#38;schema=/solr/conf/schema.xml



[name]
coreに付ける名前(例: test)


[dir]
coreのディレクトリ名(例: test)


[solrconfig]
solrconfig.xmlファイルのパス(例: /solr/conf/solrconfig.xml)


[schema]
schema.xmlファイル(例: /solr/conf/schema.xml)


SolrJを使った場合の問題
SolrJのver1.3において、SolrCoreAdminRequestのcreateCoreメソッドを使った以下のコードは失敗します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package jp.co.eni.solr.test;
&#160;
import java.io.IOException;
import java.net.MalformedURLException;
&#160;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.client.solrj.response.CoreAdminResponse;
&#160;
//失敗する
public class FailedCoreCreateTest &#123;
	public static void main&#40;String&#91;&#93; args&#41; &#123;
		try &#123;
			// SolrのURL
			String url = &#34;http://server/solr/&#34;;
			// coreの名前
			String coreName = &#34;failed&#34;;
			// coreのディレクトリ名
			String instanceDir = &#34;failed&#34;;
&#160;
			SolrServer server = new CommonsHttpSolrServer&#40;url&#41;;
			CoreAdminResponse response = CoreAdminRequest.createCore&#40;coreName, instanceDir, [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
<a href="http://www.eni.co.jp/">株式会社イージーネット</a> プロダクト&#038;サービス事業部 の久保です。</p>
<p>前回書いたSolrの記事 <a href="http://blog.eni.co.jp/tech/2009/05/apache_solr_13_overview_and_link.html">全文検索サーバ: これからSolrを始める人のためのApache Solr概要と便利なリンク集</a> はおかげさまで沢山のアクセス/ブックマークをいただきました。<br />
来週火曜日の7/21には、Lucene/Solrで有名なロンウイットの関口さん(参考: <a href="http://lucene.jugem.jp/">関口宏司のLuceneブログ</a>)などが参加される<a href="http://atnd.org/events/937">Solr勉強会</a>も開催されるようですので、Solr人気は高まっているのかもしれません。</p>
<p>今回は前回から変わって小さなネタになりますが、<br />
Solr/SolrJ1.3のCoreAdmin(マルチコア)機能を用いて動的にCoreを追加する際にはまるSolrJのバグと、その対処方法について書きます。</p>
<p><span id="more-863"></span></p>
<h3>Solr1.3のマルチコア機能とは</h3>
<p>単純に言うと、1つのSolrアプリケーション(サーブレットアプリケーション)の上で、論理的に複数のSolrアプリケーションを動かすことができる機能です。<br />
詳しくは<a href="http://blog.eni.co.jp/tech/2009/05/apache_solr_13_overview_and_link.html#multicore">前回の記事の「マルチコア構成」</a>をご覧ください。</p>
<h3>Coreを追加するためのURL(Query String)</h3>
<p>Coreを追加するのに必要なURL(Query String)は次のようになります。<br />
(参考URL: <a href="http://wiki.apache.org/solr/CoreAdmin">Solr Wiki &#8211; CoreAdmin</a>)</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863149"><td class="code" id="p863code149"><pre class="java" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//server/solr/admin/cores?action=CREATE&amp;name=[name]&amp;instanceDir=[dir]&amp;config=[solrconfig]&amp;schema=[schema]</span></pre></td></tr></table></div>

<p>(例)</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863150"><td class="code" id="p863code150"><pre class="java" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//testserver:8080/solr/admin/cores?action=CREATE&amp;name=test&amp;instanceDir=test&amp;config=/solr/conf/solrconfig.xml&amp;schema=/solr/conf/schema.xml</span></pre></td></tr></table></div>

<table class="content">
<tr>
<th>[name]</th>
<td>coreに付ける名前(例: test)</td>
</tr>
<tr>
<th>[dir]</th>
<td>coreのディレクトリ名(例: test)</td>
</tr>
<tr>
<th>[solrconfig]</th>
<td>solrconfig.xmlファイルのパス(例: /solr/conf/solrconfig.xml)</td>
</tr>
<tr>
<th>[schema]</th>
<td>schema.xmlファイル(例: /solr/conf/schema.xml)</td>
</tr>
</table>
<h3>SolrJを使った場合の問題</h3>
<p>SolrJのver1.3において、SolrCoreAdminRequestのcreateCoreメソッドを使った以下のコードは失敗します。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863151"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code" id="p863code151"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">jp.co.eni.solr.test</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.MalformedURLException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.SolrServer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.SolrServerException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.impl.CommonsHttpSolrServer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.request.CoreAdminRequest</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.response.CoreAdminResponse</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//失敗する</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FailedCoreCreateTest <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// SolrのURL</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://server/solr/&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// coreの名前</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> coreName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;failed&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// coreのディレクトリ名</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> instanceDir <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;failed&quot;</span><span style="color: #339933;">;</span>
&nbsp;
			SolrServer server <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CommonsHttpSolrServer<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			CoreAdminResponse response <span style="color: #339933;">=</span> CoreAdminRequest.<span style="color: #006633;">createCore</span><span style="color: #009900;">&#40;</span>coreName, instanceDir, server<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;qtime: &quot;</span> <span style="color: #339933;">+</span> response.<span style="color: #006633;">getQTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amalformedurlexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">MalformedURLException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>SolrServerException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>失敗の原因は、上記コードにより生成されるHTTP RequestのQuery Stringにあります。<br />
エラーのログを見ると、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863152"><td class="code" id="p863code152"><pre class="java" style="font-family:monospace;"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a> in thread <span style="color: #0000ff;">&quot;main&quot;</span> org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">common</span>.<span style="color: #006633;">SolrException</span><span style="color: #339933;">:</span> Internal Server <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aerror+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Error</span></a>
&nbsp;
Internal Server <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aerror+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Error</span></a>
&nbsp;
request<span style="color: #339933;">:</span> http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//server/solr/admin/cores?action=CREATE&amp;core=failed&amp;instanceDir=failed&amp;wt=javabin&amp;version=2.2</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">client</span>.<span style="color: #006633;">solrj</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">CommonsHttpSolrServer</span>.<span style="color: #006633;">request</span><span style="color: #009900;">&#40;</span>CommonsHttpSolrServer.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">343</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">client</span>.<span style="color: #006633;">solrj</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">CommonsHttpSolrServer</span>.<span style="color: #006633;">request</span><span style="color: #009900;">&#40;</span>CommonsHttpSolrServer.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">183</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">client</span>.<span style="color: #006633;">solrj</span>.<span style="color: #006633;">request</span>.<span style="color: #006633;">CoreAdminRequest</span>.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>CoreAdminRequest.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">170</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">client</span>.<span style="color: #006633;">solrj</span>.<span style="color: #006633;">request</span>.<span style="color: #006633;">CoreAdminRequest</span>.<span style="color: #006633;">createCore</span><span style="color: #009900;">&#40;</span>CoreAdminRequest.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">226</span><span style="color: #009900;">&#41;</span>
	at jp.<span style="color: #006633;">co</span>.<span style="color: #006633;">eni</span>.<span style="color: #006633;">solr</span>.<span style="color: #006633;">test</span>.<span style="color: #006633;">FailedCoreCreateTest</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#40;</span>FailedCoreCreateTest.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">23</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>とあるように、
<pre>name=failed</pre>
<p>ではなく
<pre>core=failed</pre>
<p>となっていることが分かります。<br />
これは、SolrJ1.3のorg.apache.solr.client.solrj.request.CoreAdminRequest.Create#getParames(rev:688188)が以下のような実装になっているためです。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863153"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p863code153"><pre class="java" style="font-family:monospace;">    @Override
    <span style="color: #000000; font-weight: bold;">public</span> SolrParams getParams<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> action <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aruntimeexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">RuntimeException</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;no action specified!&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      ModifiableSolrParams params <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ModifiableSolrParams<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span> CoreAdminParams.<span style="color: #006633;">ACTION</span>, action.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span> CoreAdminParams.<span style="color: #006633;">CORE</span>, core <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                      <span style="color: #666666; font-style: italic;">//←※ここがおかしい</span>
      params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span> CoreAdminParams.<span style="color: #006633;">INSTANCE_DIR</span>, instanceDir<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>configName <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span> CoreAdminParams.<span style="color: #006633;">CONFIG</span>, configName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>schemaName <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span> CoreAdminParams.<span style="color: #006633;">SCHEMA</span>, schemaName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">return</span> params<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>簡単な解決策</h3>
<p>以下のようなCoreAdminRequest.Createの拡張クラスを用意することで、上記の問題を解決することができます。</p>
<h4>用意するクラス</h4>

<div class="wp_codebox"><table width="100%" ><tr id="p863154"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code" id="p863code154"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">jp.co.eni.solr.test</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.request.CoreAdminRequest.Create</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.common.params.CoreAdminParams</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.common.params.ModifiableSolrParams</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.common.params.SolrParams</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SolvedCreate <span style="color: #000000; font-weight: bold;">extends</span> Create <span style="color: #009900;">&#123;</span>
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * コンストラクタ
	 *
	 * @param coreName
	 * @param instanceDir
	 * @param configName
	 * @param schemaName
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> SolvedCreate<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> coreName, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> instanceDir, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> configName, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> schemaName<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// coreの名前</span>
		setCoreName<span style="color: #009900;">&#40;</span>coreName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// coreのディレクトリ名</span>
		setInstanceDir<span style="color: #009900;">&#40;</span>instanceDir<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// solrconfig.xmlのパス</span>
		setConfigName<span style="color: #009900;">&#40;</span>configName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// schema.xmlのパス</span>
		setSchemaName<span style="color: #009900;">&#40;</span>schemaName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> SolrParams getParams<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ModifiableSolrParams params <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ModifiableSolrParams<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">getParams</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// coreではなくnameを使う</span>
		params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>CoreAdminParams.<span style="color: #006633;">CORE</span>, <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		params.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>CoreAdminParams.<span style="color: #006633;">NAME</span>, core<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> params<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>getParamsメソッドは、org.apache.solr.client.solrj.impl.CommonsHttpSolrServer#requestの中で呼ばれます。</p>
<p>CoreAdminParams.COREやCoreAdminParams.NAMEを持つorg.apache.solr.common.params.CoreAdminParamsというのは以下のようなインタフェースになっており、<br />
COREではなくNAMEを用いるのが正しそうだということになります。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863155"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p863code155"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> CoreAdminParams 
<span style="color: #009900;">&#123;</span>
  <span style="color: #008000; font-style: italic; font-weight: bold;">/** What Core are we talking about **/</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> CORE <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;core&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #008000; font-style: italic; font-weight: bold;">/** Persistent -- should it save the cores state? **/</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> PERSISTENT <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;persistent&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #008000; font-style: italic; font-weight: bold;">/** If you rename something, what is the new name **/</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> NAME <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// 後略</span></pre></td></tr></table></div>

<h4>SolvedCreate利用コード</h4>
<p>上記のSolvedCreateクラスを利用したコードは次のようになります。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p863156"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code" id="p863code156"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">jp.co.eni.solr.test</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.MalformedURLException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.SolrServer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.SolrServerException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.impl.CommonsHttpSolrServer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.solr.client.solrj.response.CoreAdminResponse</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 成功する</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SuccessCoreCreateTest <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// SolrのURL</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://server/solr/&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// coreの名前</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> coreName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;name2&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// coreのディレクトリ名</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> instanceDir <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;dir2&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// solrconfig.xmlのパス</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> configName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/solr/conf/solrconfig.xml&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// schema.xmlのパス</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> schemaName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/solr/conf/schema.xml&quot;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// Createクラスのバグ対応のため、SolvedCreateクラスを作成して使っている</span>
			SolvedCreate createRequest <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SolvedCreate<span style="color: #009900;">&#40;</span>coreName, instanceDir, configName, schemaName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			SolrServer server <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CommonsHttpSolrServer<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			CoreAdminResponse response <span style="color: #339933;">=</span> createRequest.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>server<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;qtime: &quot;</span> <span style="color: #339933;">+</span> response.<span style="color: #006633;">getQTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amalformedurlexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">MalformedURLException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>SolrServerException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>1.4では修正される模様</h3>
<p>この問題は、Apacheプロジェクトのバグトラックにも登録されています。<br />
<a href="http://issues.apache.org/jira/browse/SOLR-803">SOLR-803: CoreAdminRequest.createCore fails because name parameter isn&#8217;t set</a>を見ると、StatusはResolveとなっています。<br />
<a href="http://svn.apache.org/repos/asf/lucene/solr/">Solrのレポジトリ</a>を直接確認してみたところ、上記の問題はrev.708266の修正で解決されているようです。</p>
<blockquote><p>
    SOLR-803: fix CoreAdminRequest.createCore error
</p></blockquote>
<p>コードは確認していませんが、ちゃんとした？修正がされていそうです。</p>
<p>また<a href="http://svn.apache.org/repos/asf/lucene/solr/trunk/CHANGES.txt">pache Solr Version 1.4-dev Release Notes</a>を見ると、SOLR-803も含まれていますので、1.4のリリース時にはこのエントリで取り上げた問題は発生しなくなるはずです。</p>
<h3>参考URL</h3>
<ul>
<li><a href="http://wiki.apache.org/solr/CoreAdmin">Solr Wiki &#8211; CoreAdmin</a></li>
</ul>
<h3>使用したソフトウェア</h3>
<table class="content">
<tr>
<th>ソフトウェア</th>
<th>バージョン</th>
</tr>
<tr>
<th>Solr</th>
<td>1.3</td>
</tr>
<tr>
<th>SolrJ</th>
<td>1.3</td>
</tr>
</table>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/05/apache_solr_13_overview_and_link.html">全文検索サーバ: これからSolrを始める人のためのApache Solr概要と便利なリンク集</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/07/apache_solr_13_coreadmin_multicore_solved.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/07/apache_solr_13_coreadmin_multicore_solved.html" />
	</item>
		<item>
		<title>AIR/Flex でファイルアップロード</title>
		<link>http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html#comments</comments>
		<pubDate>Thu, 25 Jun 2009 11:45:13 +0000</pubDate>
		<dc:creator>末田 佳和</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=820</guid>
		<description><![CDATA[こんにちは。
プロダクト&#38;サービス事業部 リーダーの末田です。
今回は、AIR/Flex でファイルのアップロード(HTTPのPOST)について書こうと思います。
ファイルアップロードにおけるAIR/FlexとINPUTタグの違い
ファイルのアップロード自体は、わざわざAIR/Flexで行わなくても、HTMLのINPUTタグで可能ですが、AIR/Flexで行うと以下のような利点があります。

ブラウザが固まらない
INPUTタグによるファイルアップロードの場合、
アップロードを行っている間、ブラウザは無反応になります。
大きなファイルをアップロードしている場合、特に顕著に発生します。
その時にブラウザ内をクリックするとOSから「応答なし」という判断になることもあります。
AIR/Flexでは、そのようなことは起きません。
また、アップロード中に他の操作を受け付けることもできます。
アップロードの進捗が見えやすい
INPUTタグによるファイルアップロードの場合、
アップロードの進捗は見えない、もしくはプログレスバーが動いてはいるが、よくわからない、といった表示になります。
Ajaxを利用して、自作のプログレスバーを表示することもできますが、
クライアント側、サーバ側それぞれに仕組みが必要になります。
AIR/Flexでは、アップロードの進捗をイベントとして受け取ることができるので、クライアント側だけで、自作のプログレスバーを表示することができます。
ドラッグアンドドロップ等でファイルを選択できる(AIRのみ)
INPUTタグによるファイルアップロードの場合、
アップロードするファイルを指定する方法は、標準のファイル選択ダイアログのみとなりますが、AIRでは、ファイルパスの指定方法は限定されません。
Flexでは、標準のファイル選択ダイアログのみとなります。


基本的なファイルアップロード
AIR/Flexの場合
AIR/Flexでの基本的なファイルアップロードのサンプルコードです。
以下のように動作します。

ボタンをクリックすると、
ファイル参照ダイアログが開き、
ファイルを選択してOKをクリックすると、
ファイルがアップロードされます。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:Application xmlns:mx=&#34;http://www.adobe.com/2006/mxml&#34; layout=&#34;absolute&#34; width=&#34;300&#34; height=&#34;200&#34;&#62;
  &#60;mx:Script&#62;
    &#60;!&#91;CDATA&#91;
&#160;
    private function onClickBtn1 &#40;&#41; : void &#123;
&#160;
      //ファイル参照オブジェクトを準備します
      var file:FileReference = new FileReference&#40;&#41;;
&#160;
      //ファイル参照ダイアログで、ファイルが選択された場合に発生するイベント
      file.addEventListener&#40;Event.SELECT, function &#40;event:Event&#41;:void [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
プロダクト&amp;サービス事業部 リーダーの末田です。</p>
<p>今回は、AIR/Flex でファイルのアップロード(HTTPのPOST)について書こうと思います。</p>
<h3>ファイルアップロードにおけるAIR/FlexとINPUTタグの違い</h3>
<p>ファイルのアップロード自体は、わざわざAIR/Flexで行わなくても、HTMLのINPUTタグで可能ですが、AIR/Flexで行うと以下のような利点があります。</p>
<ol>
<li>ブラウザが固まらない</li>
<p>INPUTタグによるファイルアップロードの場合、<br />
アップロードを行っている間、ブラウザは無反応になります。<br />
大きなファイルをアップロードしている場合、特に顕著に発生します。<br />
その時にブラウザ内をクリックするとOSから「応答なし」という判断になることもあります。<br />
AIR/Flexでは、そのようなことは起きません。<br />
また、アップロード中に他の操作を受け付けることもできます。</p>
<li>アップロードの進捗が見えやすい</li>
<p>INPUTタグによるファイルアップロードの場合、<br />
アップロードの進捗は見えない、もしくはプログレスバーが動いてはいるが、よくわからない、といった表示になります。<br />
Ajaxを利用して、自作のプログレスバーを表示することもできますが、<br />
クライアント側、サーバ側それぞれに仕組みが必要になります。<br />
AIR/Flexでは、アップロードの進捗をイベントとして受け取ることができるので、クライアント側だけで、自作のプログレスバーを表示することができます。</p>
<li>ドラッグアンドドロップ等でファイルを選択できる(AIRのみ)</li>
<p>INPUTタグによるファイルアップロードの場合、<br />
アップロードするファイルを指定する方法は、標準のファイル選択ダイアログのみとなりますが、AIRでは、ファイルパスの指定方法は限定されません。<br />
Flexでは、標準のファイル選択ダイアログのみとなります。
</ol>
<p><span id="more-820"></span></p>
<h3>基本的なファイルアップロード</h3>
<h4>AIR/Flexの場合</h4>
<p>AIR/Flexでの基本的なファイルアップロードのサンプルコードです。<br />
以下のように動作します。</p>
<ol>
<li>ボタンをクリックすると、</li>
<li>ファイル参照ダイアログが開き、</li>
<li>ファイルを選択してOKをクリックすると、</li>
<li>ファイルがアップロードされます。</li>
</ol>

<div class="wp_codebox"><table width="100%" ><tr id="p820161"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code" id="p820code161"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:Application xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;200&quot;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onClickBtn1 <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
      <span style="color: #808080; font-style: italic;">//ファイル参照オブジェクトを準備します</span>
      <span style="color: #000000; font-weight: bold;">var</span> file:FileReference = <span style="color: #000000; font-weight: bold;">new</span> FileReference<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #808080; font-style: italic;">//ファイル参照ダイアログで、ファイルが選択された場合に発生するイベント</span>
      file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">SELECT</span>, <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #808080; font-style: italic;">//アップロードするURLを指定します</span>
        <span style="color: #000000; font-weight: bold;">var</span> req:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost:8080/blogsample/upload.ctrl&quot;</span><span style="color: #66cc66;">&#41;</span>;
        req.<span style="color: #006600;">method</span> = URLRequestMethod.<span style="color: #006600;">POST</span>;
&nbsp;
        <span style="color: #808080; font-style: italic;">//アップロード終了イベント</span>
        file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
          <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;complete&quot;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #808080; font-style: italic;">//アップロード実行</span>
        file.<span style="color: #006600;">upload</span><span style="color: #66cc66;">&#40;</span>req, <span style="color: #ff0000;">&quot;file1&quot;</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #808080; font-style: italic;">//ファイル参照ダイアログを開く</span>
      file.<span style="color: #006600;">browse</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
  <span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span> id=<span style="color: #ff0000;">&quot;btn1&quot;</span> x=<span style="color: #ff0000;">&quot;100&quot;</span> y=<span style="color: #ff0000;">&quot;90&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;20&quot;</span> label=<span style="color: #ff0000;">&quot;UPLOAD&quot;</span> click=<span style="color: #ff0000;">&quot;onClickBtn1()&quot;</span><span style="color: #66cc66;">/&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;/</span>mx:Application<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>Flexでは、<a href="http://www.adobe.com/livedocs/flex/3_jp/langref/flash/net/FileReference.html">flash.net.FileReference</a> クラスを使います。<br />
このクラスだけで、ファイルの選択（ダイアログ表示）とアップロードを行うことができます。</p>
<h4>AIRの場合</h4>
<p>AIR上では、このクラスだけでなく、<a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/filesystem/File.html">flash.filesystem.File</a>クラスも利用することができます。<br />
このクラスではファイルパスを指定できるので、ファイル参照ダイアログを開かなくても、アップロードするファイルを指定できます。</p>
<p>これにより、ドラッグアンドドロップ等、様々な方法でアップロードするファイルを指定できます。</p>
<p>AIR上で<a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/filesystem/File.html">flash.filesystem.File</a>クラスを使用した場合のサンプルです。</p>
<p>以下のように動作します。</p>
<ol>
<li>ボタンをクリックすると、</li>
<li>ファイルがアップロードされます。</li>
</ol>

<div class="wp_codebox"><table width="100%" ><tr id="p820162"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code" id="p820code162"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:WindowedApplication xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;200&quot;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onClickBtn1 <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
      <span style="color: #808080; font-style: italic;">//ファイルオブジェクトを準備します</span>
      <span style="color: #000000; font-weight: bold;">var</span> file:File = <span style="color: #000000; font-weight: bold;">new</span> File<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;c:<span style="color: #000099; font-weight: bold;">\\</span>uploadsample.txt&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #808080; font-style: italic;">//アップロードするURLを指定します</span>
      <span style="color: #000000; font-weight: bold;">var</span> req:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost:8080/blogsample/upload.ctrl&quot;</span><span style="color: #66cc66;">&#41;</span>;
      req.<span style="color: #006600;">method</span> = URLRequestMethod.<span style="color: #006600;">POST</span>;
&nbsp;
      <span style="color: #808080; font-style: italic;">//アップロード終了イベント</span>
      file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;complete&quot;</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
      <span style="color: #808080; font-style: italic;">//アップロード実行</span>
      file.<span style="color: #006600;">upload</span><span style="color: #66cc66;">&#40;</span>req, <span style="color: #ff0000;">&quot;file1&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
  <span style="color: #66cc66;">&lt;</span>mx:<span style="color: #0066CC;">Button</span> id=<span style="color: #ff0000;">&quot;btn1&quot;</span> x=<span style="color: #ff0000;">&quot;100&quot;</span> y=<span style="color: #ff0000;">&quot;90&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;20&quot;</span> label=<span style="color: #ff0000;">&quot;UPLOAD&quot;</span> click=<span style="color: #ff0000;">&quot;onClickBtn1()&quot;</span><span style="color: #66cc66;">/&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;/</span>mx:WindowedApplication<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<h3>アップロード時のパラメータ</h3>
<p>ファイルのアップロード時、一緒にリクエストパラメータを送信する場合は、<br />
<a href="">flash.net.URLVariables</a>クラスを使用します。</p>
<p>URLVariablesクラスに、リクエストパラメータのキー名をプロパティ名、値をプロパティの値として設定し、URLRequestクラスのdataプロパティに設定することにより、送信できます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p820163"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p820code163"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> req = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> param:URLVariables = <span style="color: #000000; font-weight: bold;">new</span> URLVariables<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
param.<span style="color: #006600;">hogekey</span>=<span style="color: #ff0000;">&quot;hogevalue&quot;</span>;
req.<span style="color: #0066CC;">data</span> = param;</pre></td></tr></table></div>

<h3>アップロードの進捗の取得</h3>
<p>アップロードの進捗度合いは、<a href="http://www.adobe.com/livedocs/flex/3_jp/langref/flash/net/FileReference.html">flash.net.FileReference</a> クラスもしくは、<a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/filesystem/File.html">flash.filesystem.File</a>クラスの<a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/events/ProgressEvent.html>flash.events.ProgressEvent.PROGRESS</a>イベントを補足することで取得できます。<br />
このイベント取得時に取得できる<a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/events/ProgressEvent.html>flash.events.ProgressEvent</a>から、全体のバイト数(bytesTotal)と現在アップロードしたバイト数(bytesLoaded)を取得できます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p820164"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p820code164"><pre class="actionscript" style="font-family:monospace;">file.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>, <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>event:ProgressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;bytesTotal=&quot;</span> + event.<span style="color: #0066CC;">bytesTotal</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;bytesLoaded=&quot;</span> + event.<span style="color: #0066CC;">bytesLoaded</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<h3>まとめ</h3>
<p>以上で、ファイルアップロードに関しては一通り行えると思います。<br />
これを利用して、詳細なプログレスバーが出る、<br />
HTMLでは実現が難しいようなアップローダー等が実現できます。</p>
<p>INPUTタグでのアップロードでは、大きなファイルになればなるほど、<br />
問題が大きく、インタフェースとして使いにくいものですので、<br />
ぜひ活用していきたく思っています。</p>
<h3>使用したソフトウェア</h3>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th>Adobe AIR</th>
<td>1.5</td>
</tr>
<tr>
<th>Adobe Flex SDK</th>
<td>3.2.0</td>
</tr>
</table>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html">AIR/Flex でドラッグ アンド ドロップ</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html">リッチなAdobe AIR/Flexのツールチップをよりリッチに</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html" />
	</item>
		<item>
		<title>全てのVisual Basicの挑戦者へ -即Bookmarkモノのリンク集-</title>
		<link>http://blog.eni.co.jp/tech/2009/06/visual_basic_helpful_links.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/06/visual_basic_helpful_links.html#comments</comments>
		<pubDate>Fri, 19 Jun 2009 08:46:23 +0000</pubDate>
		<dc:creator>正木 恵二</dc:creator>
				<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Hello World]]></category>
		<category><![CDATA[Visual Basic .Net]]></category>
		<category><![CDATA[リンク集]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=796</guid>
		<description><![CDATA[はじめまして。プロダクト&#38;サービス事業部の正木です。
私は、技術者としてのほとんどのキャリアを、Visual Basic と共に歩んできました。
今回は、短いながらも私の進んできた道を照らしてくれたVisual Basicのオススメ解説サイトを、3点、ご紹介したいと思います。
紹介する非常に上質なWebサイトは、押さえておいて全く損はありません。
ぜひ、リンク先を開いたと同時に、お使いのWebブラウザにお気に入り登録をしましょう！
さて、今回、スポットライトの当たるVisual Basic。
「Basic」というほどなので、「初心者にも組みやすく」がモットーのプログラミング言語です。
しかし、取り組始めたばかりは、一歩目の踏み出し方が解からないモノ。
私もそうです。
右足と左足、どちらの足を使って地を踏みしめてよいものかすら解かりません。
そんなあなたに、一歩目の踏み出し方、
ひいては、走り方、駆け抜け方のヒントになるWebサイトが紹介できると考えています。

まず、一つ目
「@IT」（あっとまーくあいてぃ）は、必ず押さえておきましょう。
はい、まだお気に入られていないあなた。登録しましょう！
「最新情報」「Tips」「巨大コミュニティ」の三要素を兼ね備えた、みんな大好き「@IT」です。
言わずもがな、このサイトの強みは「巨大コミュニティ」だと思います。
過去・現在・未来にあなたがぶち当たる問題は、
他の誰かにも問題として降りかかり、そして、それは既に解決されていたりするものです。
ぜひ、覗いてみましょう！
膨大な過去のコミュニケーションを知ってから、思い切って質問してみましょう！
さて。
右も左も解からず、立ち往生するあなた。
そんなあなたに「@IT」は手を差し伸べてくれます。
ボタンをフォームに貼り付け、
押せば『Hello World!!』と書かれたメッセージボックスを見て、
「なんと壮大な挨拶なんだ！」と感動したあなた。
「@IT」に感謝し、やがて歩を進める事になり、
データベースプログラミングという未知の領域に踏み入れた時も、
この「@IT」は、DBのベンダなんて関係なく、
そっとあなたのゆく道を照らしてくれるはずです。
次、二つ目
Visual Basicを、入学してでも勉強したい！
先生が海外に居ようが、駅前で留学しようが、何でもいいから勉強したい！！
そんなあなた。大丈夫です。
VBには学校も存在します。
その名も「Visual Basic中学校」。
この学校…もとい、このWebサイトの素晴らしい箇所は、やはり“丁寧さ”に尽きます。
主宰者の方は、「小学生　中学生　高校生に優しいページを目指して」おられます（カギカッコ内は、サイトより引用）。
これ幸いとばかりに、勝手に入学し、むさぼるように先生…もとい、サイトに教えを請いました。
ちゃんと勉強すれば、成果は出るものです。
なんと言っても、やればやるほど『基礎』ができます。
守破離 の 守 ですね。
サイト内のページで言うトコロの、「授業」の .Net版の「初級講座」を理解していけば、
プログラマとしての足腰がしっかり作られる事でしょう。
とっつきやすい解説サイトをお求めの方には、ぜひオススメ！
一回の入学の価値アリ！であります。
そして、三つ目
学び舎から巣立ち、仰げば尊しくなり、
VBを使って、なんだか小難しい事にも挑戦したいという、そんなワクワクが催してきたあなた！
そんなあなたには、「どぼん」がおすすめ！　
「DOBON.NETプログラミング道」です。
プログラミングの道を突き進みましょう！
Visual Basicにハマりましょう！！　ドボンといっちゃいましょう！！
“.Net”と銘打っているだけあり、Tipsには、VBだけでなく Visual C# の両方のソースが掲載されています。
VBとVC#の互換（例えば、キーワード）に対する記事なども存在します。
そして、掲載されているTipsの上質さを物語るのが、訪問者の「評価」です。
Tipsのページひとつひとつに、閲覧者の評価が載っているのですが、その大方が「良い」と評価されています。
.Net Frameworkはフルスタックフレームワークだけあるので、
実現可能な機能も多ければ、それに比例して知りたい事も膨大になるはずです。
この「どぼん」は、プログラマの心の隙間、もとい、プログラマのソースにできた隙間を埋めてくれることでしょう。
おわりに
以上で、Webサイトの紹介は終了です。
「障害物を避ける進み方」というのも大事かもしれませんが、「障害物にぶち当たる」事も意外に重要だったりします。
これらのサイトは、あなたが壁にぶち当たっても、テンションを下げすぎず、かつ冷静に居られるようしてくれる、
そんな手助けをしてくれるはずです。
先輩風を吹かせてしまっているかも知れませんが、私も発展途上です。
本エントリーを読まれている皆さんと一緒に、成長していきたいものであります。
そして、今回紹介させていただいたWebサイト以外にも、素晴らしいVisual Basicの解説サイトは数多く存在します。
それらをどう発見してどう活用するかは、あなた次第ではありますが、
あなたをバックアップしてくれる環境が既に整っているという事実は、憶えておいて損はないかと思います。
さぁさぁさぁ、一歩目を踏み出す準備はできましたか？
モチロンできましたよね！
足取り軽やかに、素晴らしいVisual Basicライフを楽しみましょう！！
さーて次回のVBさんは？
・ループから逃げ出したい
・クラスと構造体 三番勝負
・SQLのそっくりさん
の三本…いや、どれかです。
またね！
今回紹介したサイト
＠IT &#8211; アットマーク・アイティ
Visual Basic 中学校
DOBON.NETプログラミング道
紹介させていただいたWebサイトの運営者の方々には、この場を借りてお礼を申し上げます。
]]></description>
			<content:encoded><![CDATA[<p>はじめまして。プロダクト&amp;サービス事業部の正木です。</p>
<p>私は、技術者としてのほとんどのキャリアを、Visual Basic と共に歩んできました。</p>
<p>今回は、短いながらも私の進んできた道を照らしてくれたVisual Basicのオススメ解説サイトを、3点、ご紹介したいと思います。</p>
<p>紹介する非常に上質なWebサイトは、押さえておいて全く損はありません。<br />
ぜひ、リンク先を開いたと同時に、お使いのWebブラウザにお気に入り登録をしましょう！</p>
<p>さて、今回、スポットライトの当たるVisual Basic。</p>
<p>「Basic」というほどなので、「初心者にも組みやすく」がモットーのプログラミング言語です。</p>
<p>しかし、取り組始めたばかりは、一歩目の踏み出し方が解からないモノ。<br />
私もそうです。<br />
右足と左足、どちらの足を使って地を踏みしめてよいものかすら解かりません。</p>
<p>そんなあなたに、一歩目の踏み出し方、<br />
ひいては、走り方、駆け抜け方のヒントになるWebサイトが紹介できると考えています。</p>
<p><span id="more-796"></span></p>
<h3>まず、一つ目</h3>
<p><a title="＠IT - アットマーク・アイティ" href="http://www.atmarkit.co.jp/" target="_blank">「@IT」</a>（あっとまーくあいてぃ）は、必ず押さえておきましょう。<br />
はい、まだお気に入られていないあなた。登録しましょう！</p>
<p>「最新情報」「Tips」「巨大コミュニティ」の三要素を兼ね備えた、みんな大好き「@IT」です。</p>
<p>言わずもがな、このサイトの強みは「巨大コミュニティ」だと思います。</p>
<p>過去・現在・未来にあなたがぶち当たる問題は、<br />
他の誰かにも問題として降りかかり、そして、それは既に解決されていたりするものです。</p>
<p>ぜひ、覗いてみましょう！<br />
膨大な過去のコミュニケーションを知ってから、思い切って質問してみましょう！</p>
<p>さて。</p>
<p>右も左も解からず、立ち往生するあなた。<br />
そんなあなたに「@IT」は手を差し伸べてくれます。<br />
ボタンをフォームに貼り付け、<br />
押せば『Hello World!!』と書かれたメッセージボックスを見て、<br />
「なんと壮大な挨拶なんだ！」と感動したあなた。<br />
「@IT」に感謝し、やがて歩を進める事になり、<br />
データベースプログラミングという未知の領域に踏み入れた時も、<br />
この「@IT」は、DBのベンダなんて関係なく、<br />
そっとあなたのゆく道を照らしてくれるはずです。</p>
<h3>次、二つ目</h3>
<p>Visual Basicを、入学してでも勉強したい！<br />
先生が海外に居ようが、駅前で留学しようが、何でもいいから勉強したい！！</p>
<p>そんなあなた。大丈夫です。</p>
<p>VBには学校も存在します。</p>
<p>その名も<a title="Visual Basic 中学校" href="http://homepage1.nifty.com/rucio/main/main.htm" target="_blank">「Visual Basic中学校」</a>。</p>
<p>この学校…もとい、このWebサイトの素晴らしい箇所は、やはり“丁寧さ”に尽きます。</p>
<p>主宰者の方は、「小学生　中学生　高校生に優しいページを目指して」おられます（カギカッコ内は、サイトより引用）。</p>
<p>これ幸いとばかりに、勝手に入学し、むさぼるように先生…もとい、サイトに教えを請いました。</p>
<p>ちゃんと勉強すれば、成果は出るものです。</p>
<p>なんと言っても、やればやるほど『基礎』ができます。<br />
守破離 の 守 ですね。</p>
<p>サイト内のページで言うトコロの、「授業」の .Net版の「初級講座」を理解していけば、<br />
プログラマとしての足腰がしっかり作られる事でしょう。</p>
<p>とっつきやすい解説サイトをお求めの方には、ぜひオススメ！<br />
一回の入学の価値アリ！であります。</p>
<h3>そして、三つ目</h3>
<p>学び舎から巣立ち、仰げば尊しくなり、<br />
VBを使って、なんだか小難しい事にも挑戦したいという、そんなワクワクが催してきたあなた！</p>
<p>そんなあなたには、「どぼん」がおすすめ！　</p>
<p><a title="DOBON.NETプログラミング道" href="http://dobon.net/vb/" target="_blank">「DOBON.NETプログラミング道」</a>です。</p>
<p>プログラミングの道を突き進みましょう！<br />
Visual Basicにハマりましょう！！　ドボンといっちゃいましょう！！</p>
<p>“.Net”と銘打っているだけあり、Tipsには、VBだけでなく Visual C# の両方のソースが掲載されています。<br />
VBとVC#の互換（例えば、キーワード）に対する記事なども存在します。</p>
<p>そして、掲載されているTipsの上質さを物語るのが、訪問者の「評価」です。</p>
<p>Tipsのページひとつひとつに、閲覧者の評価が載っているのですが、その大方が「良い」と評価されています。</p>
<p>.Net Frameworkはフルスタックフレームワークだけあるので、<br />
実現可能な機能も多ければ、それに比例して知りたい事も膨大になるはずです。</p>
<p>この「どぼん」は、プログラマの心の隙間、もとい、プログラマのソースにできた隙間を埋めてくれることでしょう。</p>
<h3>おわりに</h3>
<p>以上で、Webサイトの紹介は終了です。</p>
<p>「障害物を避ける進み方」というのも大事かもしれませんが、「障害物にぶち当たる」事も意外に重要だったりします。<br />
これらのサイトは、あなたが壁にぶち当たっても、テンションを下げすぎず、かつ冷静に居られるようしてくれる、<br />
そんな手助けをしてくれるはずです。</p>
<p>先輩風を吹かせてしまっているかも知れませんが、私も発展途上です。<br />
本エントリーを読まれている皆さんと一緒に、成長していきたいものであります。</p>
<p>そして、今回紹介させていただいたWebサイト以外にも、素晴らしいVisual Basicの解説サイトは数多く存在します。<br />
それらをどう発見してどう活用するかは、あなた次第ではありますが、<br />
あなたをバックアップしてくれる環境が既に整っているという事実は、憶えておいて損はないかと思います。</p>
<p>さぁさぁさぁ、一歩目を踏み出す準備はできましたか？</p>
<p>モチロンできましたよね！</p>
<p>足取り軽やかに、素晴らしいVisual Basicライフを楽しみましょう！！</p>
<p>さーて次回のVBさんは？</p>
<p>・ループから逃げ出したい<br />
・クラスと構造体 三番勝負<br />
・SQLのそっくりさん</p>
<p>の三本…いや、どれかです。</p>
<p>またね！</p>
<h3>今回紹介したサイト</h3>
<p><a title="＠IT - アットマーク・アイティ" href="http://www.atmarkit.co.