Apcoordinator ユーザーズガイド |
目次 |
第3部 Webアプリケーションの開発 | > 第15章 UJIタグを使ったプログラミング | > 15.4 コンポーネントタグを使ったプログラミング |
項目クラスに対して一覧データを追加します。
package sample; import com.fujitsu.uji.compo.*; public class BodyBean extends com.fujitsu.uji.DataBean { protected ComboBox comboData = new ComboBox(); public ComboBox getComboData() { return comboData; } ... }
... 表示前の処理 ComboBox cb = dataBean.getComboData(); cb.add("赤"); cb.add("青"); cb.add("緑"); ...
JSPでuji:comboBoxタグを記述します。
リソースファイルを使用すると、コンボボックス、リストボックス、ボタンリストの項目クラスに設定する選択肢を外付けのXMLファイルに定義できます。詳細は、リソースファイルを参照してください。
フォームが送信されると、選択肢の選択状態は項目クラスに格納されます。また、画面表示時には、項目クラスに追加された一覧データが選択肢として表示されます。このとき、一覧データに文字 '"', '&', '<', '>' が含まれている場合、それぞれ'"', '&', '<', '>'に変換されて出力されます。
<FORM> <uji:comboBox bean="body" property="comboData" /> ... </FORM>
色や大きさをタグのアトリビュートや項目クラスのプロパティで設定できます。
タグによって設定可能な内容は異なります。
Netscape 4.xでは色、大きさの指定は無効です。
<FORM> <uji:comboBox bean="body" property="comboData" width="100" background="yellow" fontSize="12pt" /> ... </FORM>
TableViewクラスに対してデータ行を追加します。
package sample; import com.fujitsu.uji.compo.*; public class BodyBean extends com.fujitsu.uji.DataBean { protected TableView tableView = new TableView(); public TableView getTableView() { return tableView; } ... }
JSPでuji:tableViewタグを記述します。 表の大きさやセルの色はタグのアトリビュートで設定します。
... TableView table = dataBean.getTableView(); table.addRow(new Object[] { "りんご", "300", "1" } ); // 1行目のデータ table.addRow(new Object[] { "みかん", "50", "2" } ); // 2行目のデータ ...
<FORM> <uji:tableView bean="body" property="tableView" width="400" background="yellow" /> </FORM>
JSPでのタグのアトリビュートの指定により、ヘッダ行のセルをボタンまたはリンクにすることもできます。 ボタンがクリックされると、"verb:"の後ろに記述したコマンド(下の例ではaction)が実行されます。
... TableView table = dataBean.getTableView(); table.setHeader(new Object[] { "品名", "値段", "個数" } ); ...
リンクにする場合は"link:"に続けてコマンドを指定します。
<FORM> <uji:tableView bean="body" property="tableView" header="verb:action" /> </FORM>
ヘッダの特定の列だけをボタンやリンクにすることもできます。 "verb:"または"link:"を設定した列のセルだけがボタンやリンクになります。例のように各列ごとに異なるコマンドを設定できます。
データ行の任意の列もボタンやリンクにすることができます。以下の例では、第3列目がボタンになります。
<FORM> <uji:tableView bean="body" property="tableView" header="title;verb:action1;link:action2" /> </FORM>
<FORM> <uji:tableView bean="body" property="tableView" dataCellType="data;data;button:action" /> </FORM>
<FORM> <uji:tableView bean="body" property="tableView" dataEditable="false;true;true" /> </FORM>
<FORM> <uji:tableView bean="body" property="tableView" dataCellType="data;radio;check" /> </FORM>
CellAttributeクラスを使うと、文字色など設定の一部をセル単位で指定できます。 CellAttributeクラスで指定した内容はタグのアトリビュートよりも優先されます。
<FORM> <uji:tableView bean="body" property="tableView" headerBackground="gray" dataFontWeight="bold;normal;normal" /> </FORM>
... CellAttribute attr = new CellAttribute(); attr.setBackground("red"); TableView table = dataBean.getTableView(); table.setAttributeAt(attr, 0, 0); ...
<FORM> <uji:tableView bean="body" property="tableView" multiRow="1,2;1;1$2" /> </FORM>
作成したクラスはTableViewクラスのaddRowメソッドで指定します。
package sample; import com.fujitsu.uji.compo.*; import java.text.*; public class NumberFormatCell implements CellModel { int number; DecimalFormat formatter = new DecimalFormat("#,##0"); public NumberFormatCell(int number) { this.number = number; } public Object getValue() { return formatter.format((long)number); } public void setValue(Object value) { try { // #,##0の入力 number = formatter.parse((String)value).intValue(); } catch(Exception e) { try { // ###0の入力 number = Integer.parseInt((String)value); } catch(Exception e2) { //不明な入力 } } } }
... TableView table = dataBean.getTableView(); table.addRow(new Object[] { "りんご", new NumberFormatCell(1500), "5" } ); table.addRow(new Object[] { "みかん", new NumberFormatCell(50), "2" } ); ...
ScrollTableViewを持つデータBeanを領域に割り当てるときには、setResponseBeanメソッドの第3引数にtrueを指定します。
package sample; import com.fujitsu.uji.compo.*; public class BodyBean extends com.fujitsu.uji.DataBean { protected ScrollTableView tableView = new ScrollTableView(); public ScrollTableView getTableView() { return tableView; } ... }
public void startup(DispatchContext context) { BodyBean bean = new BodyBean(); .... context.setResponseBean("body",bean,true); }
表示行数はuji:tableViewタグのpageSizeアトリビュートか、ScrollTableViewクラスのsetPageSizeメソッドで指定します。両方指定した場合、ScrollTableViewクラスの指定が優先されます。
スクロールボタンを設置するには、uji:tableViewタグのscrollButtonアトリビュートか、uji:pushButtonタグを使用します。
<FORM> <uji:tableView bean="body" property="tableView" pageSize="10" /> </FORM>
scrollButtonアトリビュートは、容易にボタンを設置する場合に使用します。 この場合、以下のようにタグを使用します。
ボタンの設置場所や形状を細かく指定する場合はuji:pushButtonタグを使用します。 この場合、以下のようにタグを使用します。
<FORM method="post"> <input type="hidden" name="uji.verbs" value="uji.showback, ...."> <uji:tableView bean="body" property="tableView" pageSize="10" scrollButton="right" /> </FORM>
指定 | 意味 |
---|---|
forward | 次へ進む |
backward | 前へ戻る |
last | 末尾へ進む |
first | 先頭へ戻る |
スクロールボタンによって表示部分を切り替える処理は、サーバ側でJSPを再実行することによって実現されます。 したがって、スクロールボタンを押した場合のアプリケーションの動作は、ビジネスクラスが呼ばれない点を除いて、通常の送信ボタンを押した場合と同じです。すなわち、以下の処理が実行されます。
<FORM method="post"> <input type="hidden" name="uji.verbs" value="uji.showback, ...."> ... <uji:tableView bean="body" property="table" pageSize="10" tableName="employee" /> <uji:pushButton type="scrollTable" label="前へ" table="employee" scroll="backward"/> <uji:pushButton type="scrollTable" label="次へ" table="employee" scroll="forward"/> ... </FORM>
分割表示を使用する場合は以下の注意事項があります。
TreeViewクラスに対してデータ行を追加します。
package sample; import com.fujitsu.uji.compo.*; public class BodyBean extends com.fujitsu.uji.DataBean { protected TreeView treeView = new TreeView(); public TreeView getTreeView() { return treeView; } ... }
JSPでuji:treeViewタグを記述します。
... TreeNodeRow root = new TreeNodeRow(new Object[] { "root" }); TreeNodeRow child1 = new TreeNodeRow(new Object[] { "child1" }); TreeNodeRow child2 = new TreeNodeRow(new Object[] { "child2" }); TreeNodeRow child3 = new TreeNodeRow(new Object[] { "child3" }); root.addChild(child1); root.addChild(child2); root.addChild(child3); TreeNodeRow grandchild11 = new TreeNodeRow(new Object[] { "grandchild1" }); TreeNodeRow grandchild12 = new TreeNodeRow(new Object[] { "grandchild2" }); child1.addChild(grandchild11); child1.addChild(grandchild12); TreeView tree = dataBean.getTreeView(); tree.setRoot(root); ...
<FORM> <uji:treeView bean="body" property="treeView" /> </FORM>
TreeNodeRowクラスを使うと、ノードごとにアイコンを指定できます。TreeNodeRowクラスで指定した内容はタグのアトリビュートよりも優先されます。
<FORM> <uji:treeView bean="body" property="treeView" openIcon="open.jpg" closeIcon="close.jpg" leafIcon="leaf.jpg" indentIcon="child.jpg;lastchild.jpg;hasmorechild.jgp;nomorechild.jpg" /> </FORM>
... TreeView tree = dataBean.getTreeView(); TreeNodeRow root = (TreeNodeRow)tree.getRoot(); root.setIcon("special.jpg"); ...
目次 |