4.5.13 (Mar 2008)
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:
<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.xml:
ensure-pre-bugfix-table-statechange-behavior-onmousedown
Trap to Avoid
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.
Trap to Avoid
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)
7727 | Client debug log for XModify is still named the XUpdate log |
8311 | 712-4786901 - comboBox popup does not resize correctly when listBox contents are dynamically changed |
8771 | 712-5031445 712-5123753 - Dragging a row in a table will deselect all other rows |
9012 | Left click does not deselect columns in multiColumn table or treeTable |
9043 | ServerDOM not synchronized correctly when XModify/XUpdate is used |
9057 | Regression: Debug logs are not working anymore - last working properly in 4.5.7 |
9064 | Add freeze count functionality -- DisplayService getUiUpdateFreezeCount() |
9087 | Table does not automatically scroll to focused textField when using lockedColumn |
9089 | Table does not automatically scroll when setting focus on a textField |
9166 | Make navigationWrapPolicy an attribute of table, compatible with pre-4.5.5 applications |
9189 | NullPointerException by remove-element |
9190 | Memory leak by remove-element |
9209 | Table does not scroll to selected textField after wrapping when using Tab key |
9337 | dragId returns only one element ID when dragging multiple elements |
9367 | auto-wrap during input of Japanese by IME results in an extra character |
9436 | IME buffer not cleared when setAttribute() is called from onBeforeActiveLost() |
9438 | Table with selection="singleRow" wraps vertically and scrolls horizontally |
9439 | Scrolling is inaccurate by -2px |
9440 | Selection of the first time of a combo box is not highlighted |
9441 | There is a case where the display size of a scroll bar is not right |
9443 | onMouseUp does not deselect other selected rows or cells |
9459 | treeTable - onStateChange is fired when clicking on a row/cell that is already highlighted |
9468 | Nexaweb Standalone Client running an NXML file with a scrollpane based component throws an NPE |
9477 | Exception using float percentage for height or width |