This post is a short one, however, it is useful. When you use a Spinbox to change and display values, you might encounter a problem when the Spinbox' value is empty (or Null).
I used the Employees table in the HR Schema for this example.
Created ADF BC for this, and dropped the collection as an ADF Form an a simple page.
I converted the commission inputText component to an inputNumberSpinbox and set stepSize="0.1".
You can click whatever you want but the Spinbox just doesn't work for NULL values.
One of the options you have, is to enter a value in the Spinbox by just typing it.
A somewhat more elegant solution is the use of javascript.
For this I add a client Listener to the Spinbox.
The clientListener invokes a javascript function as soon as the Spinbox gets focus. Whenever the value is NULL, it will set the value to ZERO. The Spinbox now knows what to do.
When you click the empty Spinbox now, it will work as expected.
I used the Employees table in the HR Schema for this example.
Created ADF BC for this, and dropped the collection as an ADF Form an a simple page.
I converted the commission inputText component to an inputNumberSpinbox and set stepSize="0.1".
You can click whatever you want but the Spinbox just doesn't work for NULL values.
One of the options you have, is to enter a value in the Spinbox by just typing it.
A somewhat more elegant solution is the use of javascript.
For this I add a client Listener to the Spinbox.
The clientListener invokes a javascript function as soon as the Spinbox gets focus. Whenever the value is NULL, it will set the value to ZERO. The Spinbox now knows what to do.
<af:document id="d1">
<af:resource type="javascript">
function initSpinner(evt){
spinbox = evt.getSource();
val = spinbox.getValue();
if (val ==null){
spinbox.setValue(0);
}
}
</af:resource>
When you click the empty Spinbox now, it will work as expected.
Comments
The solution we use is to default the value to something (0 most times)
#{empty bindings.CreditLimit.inputValue ? 0 :
bindings.CreditLimit.inputValue}
which checks for an empty value. Having said that, I've also raised a bug on this since it doesn't work like I'd expect, but you get the idea of the theory at least ;o)