Struts 2
  1. Struts 2
  2. WW-3532

client validation isn't generated when using a VisitorFieldValidator annotation

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Minor Minor
    • Resolution: Unresolved
    • Affects Version/s: 2.2.1
    • Fix Version/s: 3.0
    • Component/s: None
    • Labels:
      None
    • Environment:

      jboss 5, struts2-core-2.2.1.jar

      Description

      When using a VisitorFieldValidator in an action, the generated Javascript doesn't validate fields on the referenced POJO, i.e. the example I have below would only generate:

      <script type="text/javascript">
      function validateForm_createAccount()

      { form = document.getElementById("createAccount"); clearErrorMessages(form); clearErrorLabels(form); var errors = false; var continueValidation = true; return !errors; }

      </script>

      I have two current workarounds, but they're a bit of a pain:
      1) Using XML validation instead of annotations.
      2) Not to use the VisitorFieldValidator model, and instead have the form fields referenced directly in the Action class.

      Here's the code I've been using (a trimmed down version of it anyway )

      AccountManagementAction.java:

      public class AccountManagementAction extends ActionSupport
      {
      private Account account;

      public Account getAccount()

      { return account; }

      @VisitorFieldValidator
      public void setAccount(Account account)

      { this.account = account; }

      ...
      }

      Account.java:
      public class Account
      {
      private String username;

      public String getUsername()

      { return username; }

      @Validations(
      requiredStrings = @RequiredStringValidator(trim = true, message = "Required"),
      stringLengthFields = @StringLengthFieldValidator(
      minLength = "2", maxLength = "10", trim = true,
      message = "This must be between $

      {minLength}

      and $

      {maxLength}

      letters"),
      regexFields = @RegexFieldValidator(expression = "^[0-9a-zA-Z]*$",
      message = "Only plain letters and numbers are allowed")
      )
      public void setUsername(String username)

      { this.username = username; }

      }

      registration.jsp:

      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      "http://www.w3.org/TR/html4/loose.dtd">

      <html>
      <head>
      <s:head/>
      </head>
      <body>
      <s:form validate="true" action="createAccount">
      <s:textfield name="account.username" label="Username" />
      <s:submit/>
      </s:form>
      </body>
      </html>

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            David G
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:

              Development