Reputation: 2176
I am very new in Struts 2. I am having three text-fields in my page, i put a validation for number only means (0-9) on that text-fields. In my validation.xml file code is like
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="disSlab.minAmt">
<field-validator type="requiredstring">
<message>Required</message>
</field-validator>
<field-validator type="int">
<param name="min">0</param>
<param name="max">9</param>
<message>Data Not Valid</message>
</field-validator>
</field>
<field name="disSlab.maxAmt">
<field-validator type="requiredstring" short-circuit="true">
<message>Required</message>
</field-validator>
</field>
<field name="disSlab.schemeValue">
<field-validator type="requiredstring" short-circuit="true">
<message>Required</message>
</field-validator>
</field>
</validators>
I know that <field-validator type="int">
is not for Number Filed . but i need to prompt user when user type anything except 0 to 9..
Can you please help me abt what should i put in that Filed for validation so i can resolved my Problem.. Thanks in Adv.
Dhrumil Shah
This is not solution this is my further Details of my Question
See i have debug the source code for validation lib. it generates client side query code like this..
<script type="text/javascript">
function validateForm_updateSlabDataFormId() {
form = document.getElementById("updateSlabDataFormId");
clearErrorMessages(form);
clearErrorLabels(form);
var errors = false;
var continueValidation = true;
// field name: disSlab.minAmt
// validator name: requiredstring
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "requiredstring on amt";
if (continueValidation && field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g, "").length == 0)) {
addError(field, error);
errors = true;
}
}
// field name: disSlab.minAmt
// validator name: required
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "required on amt";
if (field.value == "") {
addError(field, error);
errors = true;
}
}
// field name: disSlab.minAmt
// validator name: conversion
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "Conversion needed";
}
// field name: disSlab.minAmt
// validator name: int
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "Data Not Valid";
if (continueValidation && field.value != null) {
if (parseInt(field.value) <
0 ||
parseInt(field.value) >
9) {
addError(field, error);
errors = true;
}
}
}
</script>
See This code is auto generated. This code is gerenerated when I submit the page. but its not generated before the page submit.. this issue is for only <field-validator type="conversion">
Not for type=required.
Can you please help me to resolve this issue..
Finally my need is I do not want to reload a page for Number validation or any other regex validation. this is working for required validation only.
Upvotes: 2
Views: 20277
Reputation: 2176
This is not solution this is my further Details of my Question
See i have debug the source code for validation lib. it generates client side query code like this..
<script type="text/javascript">
function validateForm_updateSlabDataFormId() {
form = document.getElementById("updateSlabDataFormId");
clearErrorMessages(form);
clearErrorLabels(form);
var errors = false;
var continueValidation = true;
// field name: disSlab.minAmt
// validator name: requiredstring
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "requiredstring on amt";
if (continueValidation && field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g, "").length == 0)) {
addError(field, error);
errors = true;
}
}
// field name: disSlab.minAmt
// validator name: required
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "required on amt";
if (field.value == "") {
addError(field, error);
errors = true;
}
}
// field name: disSlab.minAmt
// validator name: conversion
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "Conversion needed";
}
// field name: disSlab.minAmt
// validator name: int
if (form.elements['disSlab.minAmt']) {
field = form.elements['disSlab.minAmt'];
var error = "Data Not Valid";
if (continueValidation && field.value != null) {
if (parseInt(field.value) <
0 ||
parseInt(field.value) >
9) {
addError(field, error);
errors = true;
}
}
}
</script>
See This code is auto generated. This code is gerenerated when i submit the page. but its not generated before the page submit.. this issue is for only
Not for type=required.
Finally my need is I do not want to reload a page for Number validation or any other regex validation. this is working for required validation only.
-------------------------------------------------------------------------------------------
Finally i got my answer
Let me explain who can i achieved the Solution
My need is to put a validation for a textfield to validate Number only inputs.
I think Struts2 provide us this basic validation but i cant find it.
So i put a regex validation on my field like
<field-validator type="regex" short-circuit="true">
<param name="expression"><![CDATA[^[0-9]+$]]></param>
<message>Not Valid Number</message>
</field-validator>
This works fine with Ajax-JQuery Validation. i Forgot to put CDATA in my regex. but now this works fine.
Thanks for your support.
Dhrumil Shah
Upvotes: 1
Reputation: 8686
You can use the regular expression validator to match the String to numbers only.
Upvotes: 1