Dhrumil Shah
Dhrumil Shah

Reputation: 2176

How to validate a textfield for number only in Struts 2?

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

Answers (2)

Dhrumil Shah
Dhrumil Shah

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

nmc
nmc

Reputation: 8686

You can use the regular expression validator to match the String to numbers only.

Upvotes: 1

Related Questions