新しい機能 (Java)
DisplayService インターフェースにメソッドを追加 : (int) getUiUpdateFreezeCount()
DisplayService.freezeUiUpdates(true) は、UI DOM の更新を最適化するために、画面の更新を一時的に停止する。 このメソッドの標準的な使い方(パターン)は、DisplayService.freezeUiUpdates(true) で停止した描画を finally ブロックに記述した、 DisplayService.freezeUiUpdates(false) で再開させる方法である。 画面更新の停止がネストしている場合、そのネストした回数をカウンタによって知ることができる。 このカウンタ(フリーズカウンタ)が、0なら描画は停止されておらず、UI DOMを更新するとその更新は、画面に反映されると判断できる。
注意点
標準的な使い方でない場合、フリーズカウンタはマイナスの値を持つこともあるが、その場合も、描画は停止されていないことを意味する。 カウンタがマイナスで、DisplayService.freezeUiUpdates(true) が 呼ばれた場合、描画は停止されない。 標準的な使い方でなくても、このメソッドの利用価値はある。 例えば、イベントによって画面の描画の停止と再開を制御する方法では、このカウンタの値を参照することで描画の状態をつねに把握することができる。 カウンタの値を参照することで、画面が停止していない状態で停止を解除することを避けることもできるし、逆に画面が停止しているときに、さらに停止する処 理を呼び出すことも避けることができる。
新しい属性 "navigationWrapPolicy"
"navigationWrapPolicy" によって、table、 tree、treeTable のcell について、キーボードによるラップ(移動)の振る舞いを指定することができる(この指定は、シングルセレクションモードのときに有効となる)。
次の、4種類の振る舞いがある。
- vertically - row の最後に到達したとき、次の row の最初のcell に移動する。逆方向に移動して、row の最初のcellに移動してきたとき、前のrow の最後のcell に移動する。
- horizontally – column の最後に到達したとき、次の column の最初のcell に移動する。逆方向に移動して、column の最初のcellに移動してきたとき、前のcolumn の最後のcell に移動する。
- always – 水平方向にも垂直方向にもラップする
- never - ラップしない
属性が指定されていない場合のデフォルトの振る舞いは、"always"となる。
新しい属性 "dragIdList"
dragIdList には、ドラッグ対象となるウィジェットのid をコンマで区切りで指定する。 この属性は、マルチドラッグがサポートされているウィジェット(tableのrowと、listItem)に対して有効となる。 dragIdList は、 onDragStart、onDragEnd、onDragDroそれぞれのイベントのパラメータとなる。これまでは、複数行ドラッグしても、ひとつの dragId だけしか利用できなかった。
機能改善 (Java)
デバッグログの変更
Platform 4.5.8 で機能していなかったデバッグログは、Platform 4.5.13 で再び動作するようになった。デバッグログは、nexaweb-client.xml で設定する。
注意点
ログ名は、 "XUpdate" から "XModify" となった。
IME バッファに関する問題
onBeforeActiveLost() でsetAttribute() を呼び出したときにIMEのバッファがクリアされない問題があった。 onBeforeActiveLost()ハンドラで textField の text属性がリセットされたとき、テキストが確定されていない状態でIMEのバッファをクリアするよう修正した。 確定されていないテキストは、再び入力を開始しても表示されなくなる。
振る舞いの変更 (Java)
"XUpdate" のログ(modificationsログ)名を"XModify"に変更した
XMLの更新で記録されるログ名をXModifyに変更した。 これまでロギングは、実装したクラスに関連して、"XUpdate"が利用されていたが、今後は"XModify"とする。 クライアントサイドでログを記録する場合、nexaweb-client.xmlで、"XUpdate"を指定せず、"XModify"を指定する。
nexaweb-client.xmlのロギング設定の例:
<log name="XModify" log-level="debug"/>
onStateChange の振る舞いを変更
dragIdList を新規に追加したことで、onStateChange と listBox、table、treeTableを選択したときの振る舞いを見直す必要があった。 onStateChangeは、ウィジェットが実際に変化したとき(例えば、選択された状態が変化したとき)にのみ発生する。 単一のウィジェットが選択されているだけでは、そのウィジェットで何度マウスクリックがあっても、onStateChangeは発生しない。 しかし、マルチプル(複合)ウィジェットが選択されているときの状態の変化については、その振る舞いは異なる。 マルチプルウィジェットが選択された状態で、onMouseDown が発生した場合、どのウィジェットも選択状態は解除されない。 しかし、その後 onMouseUp が発生し、他のすべてのウィジェットの選択状態が解除されたときは、クリックされたウィジェットの状態は変化せず、選択された状態のままとなる。
マルチプルウィジェットが選択された状態で、その中のひとつのウィジェットを CTRL + マウスクリック(mouse down)すると、 そのウィジェットの選択は解除され、onStateChange イベントが発生する。 マルチプルウィジェットではなく、ひとつのウィジェットだけが選択されている状態でも、そのウィジェットの選択は解除され、onStateChange イベントが発生する。
onStateChange の振る舞いについて、これまでの動作との互換性を保つための設定をnexaweb-client.xml で指定することができる。 これまでの動作では、選択状態の row、cell、listItemでクリックするとonStateChangeが発生した。次のフラグを "true" にすることで、この動作と互換性を保つことができる。
nexaweb-client.xmlの互換性指定フラグ:
ensure-pre-bugfix-table-statechange-behavior-onmousedown
注意点
このフラグによりこれまでの動作を継続させることができるが、つぎのような振る舞いについては変更を加えた。
<table/> の選択モードが、multiCell か multiRow のとき、互換性指定フラグが設定されていれば、マウスダウンで<table/>に対して onStateChange が発生する。 しかし、他の row や cell の選択状態は解除されないので、複数のウィジェットの id がイベントに通知される。 また、マウスをリリースすると他の row や cell の選択状態は解除される。そのとき、選択した単一の row の状態が変化しそれを反映して、新しくonStateChange が発生する。
selectionMode="singleRow" でラップしない
selectionMode="singleRow" が設定されている table で、矢印キーで垂直方向にラップし水平に移動(セルをたてに循環しながらカラムを移動)しないようになった。 最終行を選択し、下矢印キーを押しても最初の行に戻ることはなく選択状態も変わらない。 また、最初の行を選択肢、上矢印キーを押しても最終行に移動することはなく選択状態も変わらない。
修正項目 (Java)
7727 | クライアントのログでXModify ではなく XUpdate が名称として出力されている |
8311 | 712-4786901 - listBox の内容が動的にかわったときにcomboBox のメニューが正しくリサイズされない |
8771 | 712-5031445 712-5123753 – table でrow をドラッグすると他のrow の選択が解除される |
9012 | table や treeTableで、multiColumn を設定しているとき、左ボタンクリックで column の選択を解除できない |
9043 | XModify/XUpdate で ServerDOM の同期が正しく行われない |
9057 | 互換性: 4.5.7で出力できていたデバッグログが出力されない |
9064 | フリーズカウンタを追加 -- DisplayService getUiUpdateFreezeCount() |
9087 | lockedColumn を使ったとき、テーブルは自動的にスクロールしてtextField にフォーカスしない |
9089 | textField にフォーカスを設定しても、テーブルは自動的にスクロールしない |
9166 | table に navigationWrapPolicy 属性を追加した。4.5.5 以前のプラットフォームを利用したアプリケーションとも互換性を保つ |
9189 | remove-element で NullPointerException が発生する |
9190 | remove-element で、メモリリークが発生する |
9209 | タブキーでtextField に移動しても table がスクロールしない |
9337 | 複数のエレメントをドラッグしたとき、dragId はひとつのエレメントの ID を返す |
9367 | IMEで日本語を入力しているときオートラップで余分な文字が入力される |
9436 | onBeforeActiveLost() から setAttribute() が呼ばれたとき、IMEのバッファがクリアされない |
9438 | selection="singleRow" のtable で垂直方向にラップ(循環しながら移動)し、水平方向にスクロールする |
9439 | スクロールで-2px ずれる |
9440 | comboBox を選択しても最初はハイライトされない |
9441 | スクロールバーの表示サイズが正確でない |
9443 | onMouseUp で row や cell の選択が解除されない |
9459 | treeTable - すでにハイライトされている row や cell をクリックしたときに onStateChange が発生する |
9468 | Nexaweb Standalone Client で scrollPane を利用した NXML で NullPointerException が発生する |
9477 | height と width に浮動小数点を指定すると例外が発生する |
修正の詳細 (Java)
7727 |
---|
クライアントのログでXModify ではなく XUpdate が名称として出力されている |
クライアントで XModify のログ出力を行った場合、ログ出力時のメッセージが XModify ではなく XUpdate として出力されている問題を修正 |
8311 |
---|
712-4786901 - listBox の内容が動的にかわったときにcomboBox のメニューが正しくリサイズされない |
コンボボックス内の listBox の listItem を動的に変更した場合、コンボボックスのプルダウンリストの表示サイズが自動的にリサイズされない問題を修正 |
8771 |
---|
712-5031445 712-5123753 – table でrow をドラッグすると他のrow の選択が解除される |
テーブル内で複数選択されている状態で、行データをドラッグした場合、ドラッグ開始位置以外の行の選択が解除されてしまう問題の修正 |
9012 |
---|
table や treeTableで、multiColumn を設定しているとき、左ボタンクリックで column の選択を解除できない |
マウスの左クリックによってテーブルの選択行を解除することができない問題の修正。 通常、複数行が選択されている場合、マウスの左クリックによってクリックされた行以外のデータの選択が解除されるべきですが、 複数選択されている状態で、選択済み行のいずれかをマウスで左クリックしても選択行の解除は行われませんでした。 Ctrl キーを押していない状態でマウスが左クリックされた場合、クリック位置以外の選択行が解除されるように修正しました |
9043 |
---|
XModify/XUpdate で ServerDOM の同期が正しく行われない |
同じサーバーレスポンスデータに含まれる XModify/XUpdate の中で選択状態の排他制御を行うような selected 属性を複数箇所で更新した場合、 ServerDOM 上で更新された selected 属性の状態が正しく排他制御されない問題の修正 |
9057 |
---|
互換性: 4.5.7で出力できていたデバッグログが出力されない |
4.5.7 にてクライアント側の Java Console に出力されていたマクロのデバッグログ情報が出力されなくなっていた問題の修正 |
9064 |
---|
フリーズカウンタを追加 -- DisplayService getUiUpdateFreezeCount() |
DisplayService#freezeUiUpdates() メソッドを使用して画面をフリーズした場合のフリーズカウントを取得する API を int DisplayService#getUiUpdateFreezeCount() として追加 |
9087 |
---|
lockedColumn を使ったとき、テーブルは自動的にスクロールしてtextField にフォーカスしない |
テーブル内で cell 以外の UI コンポーネントが使用されていた場合、 cell 以外の UI コンポーネントがフォーカスを受け取ると、 フォーカスを受け取った UI コンポーネントを全て表示するためにテーブル内で自動スクロール処理が行われます。 テーブル内のカラムとして lockedColumn が存在していない場合この処理は問題ありませんが、テーブル内のカラムとして lockedColumn が 存在していた場合に自動するクロールが行われると lockedColumn が存在していない状態と同じ自動スクロール処理が行われ、 フォーカスを受け取った UI コンポーネントが lockedColumn の裏側に隠れるような状態で表示されてしまう問題の修正。 修正後は、 lockedColumn が存在している場合、 lockedColumn の表示位置はスクロール可能エリアとして扱わずに自動スクロール位置を調整するように修正。 |
9089 |
---|
textField にフォーカスを設定しても、テーブルは自動的にスクロールしない |
テーブル内に cell 以外の UI コンポーネントが存在しており、 cell が選択されている状態で UI コンポーネントに プログラムからフォーカスを設定した場合、 UI コンポーネントを表示するための自動スクロールが行われない問題の修正。 通常、テーブル内の cell 以外の UI コンポーネントがフォーカスを受け取った場合、自動スクロールされますが、 cell が選択されており、 UI コンポーネントへのフォーカスの設定がプログラムから行われた場合、自動スクロール処理は行われていませんでした。 |
9166 |
---|
table に navigationWrapPolicy 属性を追加した。4.5.5 以前のプラットフォームを利用したアプリケーションとも互換性を保つ |
4.5.6 によってテーブルの選択行の自動ラップ機能が追加されました。 この機能追加によってテーブル内の最下行が選択されている状態で、下矢印キーを押すと最上位行へ選択行が移動するようになりました。 4.5.5 までは、最下行が選択されている状態で、下矢印キーを押しても選択行は移動しませんでした。 4.5.6 での機能変更によって過去の振る舞いに対する互換性確保のためのオプションが提供されていなかったため、 このバージョンで過去と同じ振る舞いを得るためのオプションが追加されました。 table, tree, treeTable は navigationWrapPolicy 属性を新しく利用することができるようになり、 navigationWrapPolicy 属性によって テーブルの振る舞いを変更する事ができます。 4.5.5 以前と同じ振る舞いを期待する場合は navigationWrapPolicy="never" をスタイルシートによって table, tree, treeTable へ設定してください。 |
9189 |
---|
remove-element で NullPointerException が発生する |
同じサーバーレスポンスデータ内での XModify/XUpdate によってエレメントの作成と作成したエレメントの削除を行っている場合、 NullPointerException が発生する場合がある問題の修正。 |
9190 |
---|
remove-element で、メモリリークが発生する |
同じサーバーレスポンスデータ内での XModify/XUpdate によってエレメントの作成と作成したエレメントの削除を行っている場合、 メモリリークが発生する問題の修正。 |
9209 |
---|
タブキーでtextField に移動しても table がスクロールしない |
テーブルの quickEdit が "true" に設定されている場合に、 cell の代わりに使用している UI コンポーネントにフォーカスが移動した場合、 フォーカスを受け取った UI コンポーネントを表示するための自動スクロールが行われない場合がある問題の修正。 |
9337 |
---|
複数のエレメントをドラッグしたとき、dragId はひとつのエレメントの ID を返す |
テーブルや listBox などで複数のアイテムを選択している状態で、マウスドラッグを行った場合、選択状態の全てのアイテムの ID を取得する手段がありませんでした。 この問題を解決するために、イベントパラメータとして "dragIdList" が追加され、ドラッグ時に選択されていたアイテム全ての ID がカンマ区切りで取得できるように機能を追加しました。 |
9367 |
---|
IMEで日本語を入力しているときオートラップで余分な文字が入力される |
textArea 上で IME を使用して日本語入力を行っている場合に、入力エリア内で自動改行(オートラップ)が行われた場合、 入力確定済みの文字列が自動改行によって削除されたり、余分な文字が追加されたりしていた問題の修正 |
9436 |
---|
onBeforeActiveLost() から setAttribute() が呼ばれたとき、IMEのバッファがクリアされない |
IME の入力中に onBeforeActiveLost イベントを発生させ onBeforeActiveLost イベントの中から Element#setAttribute() を使用して "text" 属性値を変更した場合、 IME によって入力中だった文字列が破棄されずに残り続けていた問題の修正。 |
9438 |
---|
selection="singleRow" のtable で垂直方向にラップ(循環しながら移動)し、水平方向にスクロールする |
テーブルの選択モードが singleRow の場合に選択行のラップを繰り返した場合、水平方向のスクロールが発生する問題の修正 |
9439 |
---|
スクロールで-2px ずれる |
テーブルにデータを追加してスクロールバーが表示される場合、スクロールバーの位置が自動的に -2px づつずれる場合がある問題の修正 |
9440 |
---|
comboBox を選択しても最初はハイライトされない |
コンボボックス内の listItem が selected="true" を初期状態で持っている場合に、コンボボックスのプルダウンリストを開くと 初回のプルダウンリストの表示時に選択済み listItem がハイライトされていない問題の修正。 |
9441 |
---|
スクロールバーの表示サイズが正確でない |
スクロールバーのバーサイズの初期表示サイズが正しくない場合がある問題の修正。 スクロールバーは通常、スクロール量によってバーの表示サイズを自動調整しますが、 この問題が発生した場合、バーの表示サイズは常に初期状態が非常に短い状態で表示されていました。 |
9443 |
---|
onMouseUp で row や cell の選択が解除されない |
この問題は、 9012 と関連があります。 onMouseUp イベント発生時に 9012 の修正によって複数選択されている row や cell の選択状態は解除されているべきですが、 onMouseUp イベントのタイミングでは選択状態が解除されていなかった問題の修正。 |
9459 |
---|
treeTable - すでにハイライトされている row や cell をクリックしたときに onStateChange が発生する |
table, tree, treeTable で既に選択済みの行やセルをクリックした場合に onStateChange イベントが発生していた問題の修正。 onStateChange イベントは選択状態に変更があった場合に発生するイベントであるため、 選択状態が変更されなかったオペレーションに対してイベントを発生させるべきではありません。 ただし、この変更によってイベント発生条件が従来のバージョンと異なるため、 従来のバージョンと同じ振る舞いを維持するためのオプションが nexaweb-client.xml に ensure-pre-bugfix-table-statechange-behavior-onmousedown オプションとして 追加されました。 |
9468 |
---|
Nexaweb Standalone Client で scrollPane を利用した NXML で NullPointerException が発生する |
Standalone Client を使用した場合、起動直後に NullPointerException が発生する問題の修正。 この問題は、 4.5.13 の修正課程の中で内部的に生じた問題です。 このため、この問題が起こる GA バージョンは存在しません。 |
9477 |
---|
height と width に浮動小数点を指定すると例外が発生する |
サイズ指定時に小数点を持つパーセント指定を行った場合に例外が発生する問題の修正 |