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)

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