Hi,
InputText should allow only numbers. I tried to implement using ClientListener and the below javascript but I am able to enter special characters like !@#$%^&*().
How to achieve this?
<af:inputText label="Days After Actual Project Start:"
id="it10"
value="#{ReviewDeadlineRuleEvents.daysAfterActProjectStart}"
maximumLength="#{bindings.DaysAfterActProjStart.hints.precision}">
<f:validateLongRange minimum="0"/>
<af:convertNumber groupingUsed="false"
pattern="#{bindings.DaysAfterActProjStart.hints.format}"/>
<af:clientListener method="filterForNumbers"
type="keyDown"/>
</af:inputText>
javascript:
| <af:resource type="javascript"> |
| function filterForNumbers(evt) { |
| //get ADF Faces event source, InputText.js |
| var inputField = evt.getSource(); |
var oldValue = inputField.getValue();
var ignoredControlKeys = new Array(AdfKeyStroke.BACKSPACE_KEY,AdfKeyStroke.DELETE_KEY);
| //define the key range to exclude from field input |
| var minNumberKeyCode = 48; |
| var maxNumberKeyCode = 57; |
| var minNumberPadKeyCode = 96; |
| var maxNumberPadKeyCode = 105; |
| //key pressed by the user |
| var keyCodePressed = evt.getKeyCode(); |
| //if it is a control key, don't suppress it |
| var ignoreKey = false; |
for (keyPos in ignoredControlKeys) {
| | if (keyCodePressed == ignoredControlKeys[keyPos]) { |
| | ignoreKey = true; |
| | break; |
| | } |
}
| //return if key should be ignored |
| if (ignoreKey == true) { |
| | return true; |
| } |
| //filter keyboard input |
| if (keyCodePressed < minNumberKeyCode || keyCodePressed > maxNumberPadKeyCode) { |
| | //set value back to previous value |
| | inputField.setValue(oldValue); |
| | //no need for the event to propagate to the server, so cancel |
| | //it |
| | evt.cancel(); |
| | return true; |
| } |
| if (keyCodePressed > maxNumberKeyCode & keyCodePressed < minNumberPadKeyCode) { |
| | //set value back to previous value |
| | inputField.setValue(oldValue); |
| | evt.cancel(); |
| | return true; |
| } |
}
</af:resource>
Thanks in Advance.