Java Improvements
"XUpdate" modifications log name changed to "XModify"
The name of the log for modifications is now Xmodify. Since the logging is related to the implementing class, using "XUpdate" in client xml for logger settings will no longer affect modifications logging. Please now use "XModify" instead of "XUpdate" in nexaweb-client.xml.
An example log setting under the log-configuration setting in nexaweb-client.xml:
...
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 だけしか利用できなかった。
デバッグログの変更
Platform 4.5.8 で機能していなかったデバッグログは、Platform 4.5.13 で再び動作するようになった。デバッグログは、nexaweb-client.xml で設定する。
注意点
ログ名は、 "XUpdate" から "XModify" となった。
IME バッファに関する問題
onBeforeActiveLost() でsetAttribute() を呼び出したときにIMEのバッファがクリアされない問題があった。 onBeforeActiveLost()ハンドラで textField の text属性がリセットされたとき、テキストが確定されていない状態でIMEのバッファをクリアするよう修正した。 確定されていないテキストは、再び入力を開始しても表示されなくなる。
"XUpdate" のログ(modificationsログ)名を"XModify"に変更した
XMLの更新で記録されるログ名をXModifyに変更した。 これまでロギングは、実装したクラスに関連して、"XUpdate"が利用されていたが、今後は"XModify"とする。 クライアントサイドでログを記録する場合、nexaweb-client.xmlで、"XUpdate"を指定せず、"XModify"を指定する。
nexaweb-client.xmlのロギング設定の例:
<log name="XModify" log-level="debug"/>
New DisplayService Interface Method: (int) getUiUpdateFreezeCount()
For optimizations when processing large collections of UI document changes, DisplayService.freezeUiUpdates(true) is provided to allow screen painting to be temporarily suspended.
The standard pattern to ensure the UI is then unfrozen appropriately is to call DisplayService.freezeUiUpdates(false) in a finally block after each DisplayService.freezeUiUpdates(true).
Since these calls can be nested, a counter is used to keep track of how many times the UI has been frozen. A freeze count of 0 is considered unfrozen and will paint every time the UI document changes.
Note: If the standard patterns is not used, it is possible for the count to go negative, which is also considered unfrozen. If the count is negative and DisplayService.freezeUiUpdates(true) is called, the UI would still not be frozen.
This method is being exposed to assist customers using nontraditional patterns, such as event driven freezing and unfreezing of the UI so they can see the underlying state of the display service freeze counter for diagnostic purposes, such as tracking down when a call to unfreeze the UI is being made without a corresponding call to freeze the UI and vice-versa.
Change in onStateChange Behavior
To correctly implement new dragIdList attribute, onStateChange and selection behavior changed in list box, table, and tree table components. onStateChange only fires when the state of a component actually changes (for example, selection changes). If only a single component is selected, onStateChange will NOT fire when clicking on that selected component one or more times. The following example illustrates the change in selection behavior. If multiple components are selected, and then onMouseDown is fired on one of the multiple selected components, none of the components will deselect, but then when onMouseUp fires all other selected components will deselect, leaving the component clicked on in an unchanged state, selected.
Currently, if multiple components are selected, CTRL + mouse down on a selected component will deselect that component and fire an onStateChange event. If only one component is selected, CTRL + mouse down on the selected component will deselect that component and fire an onStateChange.
To enable backward compatibility for applications built using the prior onStateChange behavior, a flag can be set in nexaweb-client.xml. The old behavior: onStateChange will fire when a selected row, cell, or listItem is clicked. The old behavior can be recovered by setting the following flag to "true".
Compatibility Flag in nexaweb-client.xmlonStateChange の振る舞いを変更
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
...
Info | ||
---|---|---|
| ||
Important Note: the flag will provide the previous behavior; however there is still one behavioral change: When the table is in multiCell or multiRow selection mode, the mouse down will fire the onStateChange for the table, because the compatibility flag is set; however, since it will not be clearing the selection state of the other rows/cells, multiple Ids will be reported for this event. Also, when the mouse is released the other rows/cells will be cleared, firing another onStateChange to reflect the new state with the single selected row. |
Modifications Debug Logs
Debug logs that stopped working in Platform 4.5.8 now work again in Platform 4.5.13. Debug logs can be enabled by editing Nexaweb-client.xml.
Info | ||
---|---|---|
| ||
Debug log is now called “XModify” instead of “XUpdate”. |
New attribute "navigationWrapPolicy"
A new attribute called “navigationWrapPolicy” allows customers to specify how to wrap when using the keyboard to navigate table, tree, and tree table cells (widgets must be in single cell selection mode).
Four possible wrap policies exist:
- vertically - when the end of a row is reached, proceed to the first cell in the next row, when traversing backwards and the beginning of a row is reached, proceed to the last cell of the previous row
- horizontally - when the end of a column is reached, proceed to the first cell in the next column, when traversing backwards and the beginning of a column is reached, proceed to the last cell of the previous column
- always - wraps both horizontally and vertically
- never - does not wrap
When this atribute is not specified, the default behavior will be "always".
Tables with selectionMode="singleRow" do not wrap
Tables with selectionMode="singleRow" no longer wrap vertically and scroll horizontally when navigating with arrow keys. Selecting the last row in the table, and then pressing the down arrow key no longer moves the row selection to the top row, instead the row selection will not change. Selecting the top row, and then pressing the up arrow key will not wrap the selection, but keep the selection in the first row.
New attribute "dragIdList"
dragIdList is a comma delimited list of Ids of components being dragged. This parameter is only set for components which support multi-drag, currently table rows and list items. dragIdList is an event parameter of onDragStart, onDragEnd, and onDragDrop. Previous to this release only a single dragId was accessible, even when dragging multiple rows.
IME Buffer Issue
There was an issue where the IME buffer did not clear when setAttribute() was called from onBeforeActiveLost(). This maintanence release addresses the issue so that now if the text of a textField is reset from an onBeforeActiveLost() handler, the uncommitted text is cleared from the IME buffer. The uncommitted text will now NOT show once typing starts again.
Defects Resolved (Java)
...
注意点
このフラグによりこれまでの動作を継続させることができるが、つぎのような振る舞いについては変更を加えた。
<table/> の選択モードが、multiCell か multiRow のとき、互換性指定フラグが設定されていれば、マウスダウンで<table/>に対して onStateChange が発生する。 しかし、他の row や cell の選択状態は解除されないので、複数のウィジェットの id がイベントに通知される。 また、マウスをリリースすると他の row や cell の選択状態は解除される。そのとき、選択した単一の row の状態が変化しそれを反映して、新しくonStateChange が発生する。
selectionMode="singleRow" でラップしない
selectionMode="singleRow" が設定されている table で、矢印キーで垂直方向にラップし水平に移動(セルをたてに循環しながらカラムを移動)しないようになった。 最終行を選択し、下矢印キーを押しても最初の行に戻ることはなく選択状態も変わらない。 また、最初の行を選択肢、上矢印キーを押しても最終行に移動することはなく選択状態も変わらない。
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 に浮動小数点を指定すると例外が発生する |
...