如何在Struts 2中验证文本字段的数量?

时间:2011-06-27 10:22:56

标签: xml validation struts2

我是Struts 2中的新手。我的页面中有三个文本字段,我对该文本字段进行了数字验证(0-9)。在我的validation.xml文件中,代码就像

<!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>

我知道<field-validator type="int">不适用于Number Filed。但我需要在用户输入除0到9之外的任何内容时提示用户。

你能帮我解决一下我应该提交哪些文件进行验证,这样我就可以解决我的问题了。感谢Adv。

Dhrumil Shah

这不是解决方案,这是我的问题的进一步细节

请参阅我已经调试了验证lib的源代码。它会像这样生成客户端查询代码..

<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>

请参阅此代码是自动生成的。提交页面时,此代码非常有用。但它在页面提交之前未生成..此问题仅适用于<field-validator type="conversion"> 不适用于type = required。

你能帮我解决这个问题..

最后我需要的是 我不想为数字验证或任何其他正则表达式验证重新加载页面。这仅适用于所需的验证。

2 个答案:

答案 0 :(得分:1)

您可以使用regular expression validator仅将字符串与数字匹配。

答案 1 :(得分:1)

这不是解决方案,这是我的问题的进一步细节

请参阅我已经调试了验证lib的源代码。它会像这样生成客户端查询代码..

<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>

请参阅此代码是自动生成的。当我提交页面时,此代码非常有用。但它在页面提交之前未生成..此问题仅适用于

  

  不适用于type = required。

最后我需要的是 我不想为数字验证或任何其他正则表达式验证重新加载页面。这仅适用于所需的验证。

-------------------------------------------------------------------------------------------

最后我得到了答案

让我解释一下我能找到解决方案

我需要对文本字段进行验证以验证仅数字输入。

我认为Struts2为我们提供了这个基本的验证,但我找不到它。

所以我在我的领域进行了正则表达式验证,如

<field-validator type="regex" short-circuit="true">
    <param name="expression"><![CDATA[^[0-9]+$]]></param>
         <message>Not Valid Number</message>
 </field-validator>

这适用于Ajax-JQuery验证。 我忘了把 CDATA 放在我的正则表达式中。但现在这很好。

感谢您的支持。

Dhrumil Shah