Cftextarea -maxlength validation

I have a form field that is a <cftextarea> field that I
would like to limit end users to only be able to enter 255
characters. I have tried the following:
<cftextarea name="lDescription" required="no" tabindex=5
class="boxbig"
style="height: 160px;" validate="maxlength"
validateAt="onBlur" maxlength="255" message="The listing you have
entered has exceeded 255 characters! The administrator may choose
to condense the listing before making it
available"><cfoutput>#Trim(Detail.lDescription)#</cfoutput></cftextarea>
But this only shows the warning when the user submits the
form and saves the entire text to the db. Is there a way that I can
limit the text that they type into the field so that it only allows
the intended maximum characters or is this not possible with a
textarea form field or a cftextarea form field? Thanks in advance
and sorry if this is a simple problem.

I want to be able to limit the text on the field so that the
end user knows when they have reached the 255 character limit so
that they do not have to count the characters on their own to see
if they are within in the limit. I would be satisfied if when they
exceeded the character limit that instead of proceeding to the
action page when clicking OK on the warning message instead they
would be taken back to the original form so that they could reduce
the number of characters in the field. Is there a different type of
form field that I should be using or different validation?

Similar Messages

  • Cftextarea maxlength="1000" not working...

    Any idea why this might not be working?
    <cftextarea name="additionalremarks" cols="90"
    class="classmainfont" maxlength="1000"></cftextarea>
    It doesn't restrict the characters to 1000 char....

    add these attributes
    validate="maxlength" validateat="onSubmit"

  • Validation form code?

    ok. So I have these boxes-
    First Name
    Last Name
    E-Mail
    Username
    Password
    Re-Type Password
    I also have a register button.
    I have properly linked my javascript and checked for any
    mistakes but when I click the register button, I get an error
    saying that I am missing parts of my form where I want an alert box
    to come up instead.
    Attached is my Javascript.

    What does the error message say, exactly. And can we see the
    HTML?
    By the way,
    > errorMessage += "Please enter less letters.\n";
    wouldn't you want to say "Please enter fewer letters.\n"?
    > errorMessage += "Please choose select a button.\n";
    I have no idea what this says....
    Murray --- ICQ 71997575
    Adobe Community Expert
    (If you *MUST* email me, don't LAUGH when you do so!)
    ==================
    http://www.projectseven.com/go
    - DW FAQs, Tutorials & Resources
    http://www.dwfaq.com - DW FAQs,
    Tutorials & Resources
    ==================
    "Night_Watch" <[email protected]> wrote in
    message
    news:[email protected]...
    > ok. So I have these boxes-
    > First Name
    > Last Name
    > E-Mail
    > Username
    > Password
    > Re-Type Password
    >
    > I also have a register button.
    >
    > I have properly linked my javascript and checked for any
    mistakes but when
    > I
    > click the register button, I get an error saying that I
    am missing parts
    > of my
    > form where I want an alert box to come up instead.
    >
    > Attached is my Javascript.
    >
    > // JavaScript Document
    >
    > // ---------------------- Form
    > Validation ---------------------------------
    > // this file will work with registration.html
    >
    > function validate(){
    > /*this runs when the user clicks the submit button*/
    > /* VARIABLES START
    > var valid = true;
    > var errorMessage="";
    > var minLength = 3;
    > var maxLength = 9;
    > /*VARIABLES END-----------------------*/
    >
    > /* FIRST NAME START---------------*/
    > var
    firstName=document.getElementById("firstname").value;
    > if(firstName.length < minLength){
    > valid = false;
    > errorMessage += "Please enter more letters.\n";
    > }
    > if(firstName.Length > maxLength){
    > valid = false;
    > errorMessage += "Please enter less letters.\n";
    > }
    >
    > /*FIRST NAME END------------------------*/
    >
    > /*LAST NAME ENDS--------------------------*/
    >
    > var lastName=document.getElementById("lastname").value;
    > if(lastName.length < minLength){
    > valid = false;
    > errorMessage += "Please enter more letters.\n";
    > }
    > if(lastName.Length > maxLength){
    > valid = false;
    > errorMessage += "Please enter more letters!.\n";
    > }
    >
    > /*LAST NAME ENDS-------------------------------*/
    >
    > /*RADIO BUTTONS START--------------------------*/
    > var format = document.myForm.format; /*this will target
    the two radio
    > buttons*/
    > /*the variable format will actually be an array
    > alert(format.length);
    > alert(format[0].value);
    > alert(format[1].value);*/
    >
    > if(format[0].checked==false &&
    format[1].checked==false){
    > valid = false;
    > errorMessage += "Please choose select a button.\n";
    > }
    >
    >
    >
    > /*RADIO BUTTONS END---------------------------*/
    >
    > /*CHECK PASSWORD FOR NUMBERS & LETTERS
    START--------------*/
    > var hasLetters = false;
    > var hasNum = false;
    > var passCheck =
    document.getElementById("password").value;
    >
    >
    > for(i=0; i < passCheck.length; i++){
    > /*look at each letter and character ... one at a time*/
    > var letter = passCheck.substr(i,1);
    > if ( isNaN(letter)){
    > /*isNaN checks to see if the letter is not a number*/
    > /*when this is false it means we have a letter*/
    >
    > hasLetters = true;
    > /*alert("password requires numbers and letters.");*/
    > } else {
    > hasNum = true;
    > }
    > }
    >
    > if (hasNum !=true){
    > errorMessage += "-.-"\n"
    > }
    >
    > if ( valid == false ){
    > alert(errorMessage);
    >
    > }
    > }
    >

  • How to send the SOAP Fault Message to the Web Service Consumer

    Hi,
    I have configured SAOP  to Proxy Syncronous Scenario in PI 7.1 and using XML Validation  in Adapter Engine to Validate the Structure of the Message Payload.The scenario is working fine.When some of the Filed's Length  increses the maxLength specified in the Data Type . We are getting the Following error.
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP:Body>
          <SOAP:Fault>
             <faultcode>SOAP:Server</faultcode>
             <faultstring>Server Error</faultstring>
             <detail>
                <s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0">
                   <context>XIAdapter</context>
                   <code>ADAPTER.JAVA_EXCEPTION</code>
                   <text>com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.engine.interfaces.messaging.api.exception.MessageFormatException: XML Validation for payload with root element name MT_Out_CustomerMaster_FPMReq , target namespace http://Pegasystems.com/I06_Customers Failed!Errors Encountered During Parsing
    1.cvc-maxLength-valid: Value '123456789' with length = '9' is not facet-valid with respect to maxLength '8' for type 'null'.
    2.cvc-type.3.1.3: The value '123456789' of element 'CompanyCode' is not valid.
    3.cvc-maxLength-valid: Value 'asdf' with length = '4' is not facet-valid with respect to maxLength '1' for type 'null'.
    4.cvc-type.3.1.3: The value 'asdf' of element 'OperationType' is not valid.
         at com.sap.aii.adapter.soap.ejb.XISOAPAdapterBean.process(XISOAPAdapterBean.java:1164)
    My question is How does the Web Service Consumer can handle this Soap Server Error in the SOAP Fault.Or How can we provide a specific information like  'The value '123456789' of element 'CompanyCode' is not valid.It exceeds the Maximum Length'.
    I read this /people/sap.user72/blog/2006/01/16/xi-propagation-of-meaningful-error-information-to-soap-client blog .Where it is mentioned that the Web Service Consumer can handle while calling the Web Service.Is there any other solution?
    Kindly appreciate your help.

    Thank You Stefan for your kind reply.
    So  you mean to say if we use the XML Validation .we cannot provide proper error information to the calling Web Service Consumer .And While calling a Web Service they cannot Extract the Exact Message in the Text Filed(<text>) present under the Detail Element (<detail>) in the <SOAP:Fault> node. as
    <text>com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.engine.interfaces.messaging.api.exception.MessageFormatException: XML Validation for payload with root element name MT_Out_CustomerMaster_FPMReq , target namespace http://Pegasystems.com/I06_Customers Failed!Errors Encountered During Parsing
    1.cvc-maxLength-valid: Value '123456789' with length = '9' is not facet-valid with respect to maxLength '8' for type 'null'.
    2.cvc-type.3.1.3: The value '123456789' of element 'CompanyCode' is not valid.**
    3.cvc-maxLength-valid: Value 'asdf' with length = '4' is not facet-valid with respect to maxLength '1' for type 'null'.
    4.cvc-type.3.1.3: The value 'asdf' of element 'OperationType' is not valid.
    That is why we have to use the Fault messages and  Field Lengths has to be Validated  in the Server proxy.
    Please Correct me If I am wrong.

  • Maxlength on cftextarea

    I am trying to limit the number of characters input into a cftextarea:
    <cfform action="textareaAction.cfm" method="post">
    <table>
    <tr>
    <td width="33">
    </td>
    <td>
    <cftextarea name="NEED_COMMENT" wrap="virtual" rows="5" cols="25"
    validate="maxlength" validateAt="onBlur" maxlength="200" onKeyDown="limitText('comments','countdown_comments',200)">
    </cftextarea>
    <input type="Submit" value="Submit"> <input type="Reset"
    value="Clear Form">
    </td>
    </table>
    </cfform>>
    It takes more than 200 characters.  If I enter more than 200 characters, upon submit I get an error from the remote DB2 database that the insert did not occur because the string was too long for the column.
    Thank you,
    Jeanne

    Best method is to validate at server side. So that even if the javascipt is disabled your site will not break.

  • F4 help for Date field and Validation

    Hi Friends,
    I am new to BSP programming .I knew getting F4 help in normal ABAP.But i don't know in BSP .
    I want simple steps to get F4 for a field on Page as well as date field .
    and How to valid those entered dates.
    Presently i am using length 10 character variable for DATE without F4 help and No validation.
    I think you guys will help me out.
    Thanks,
    Venkat.O

    Welcome to SDN.
    for F4 help with validation for dates you can use the following code.
    <htmlb:inputField id         = "wf_ad_date"
                                    type       = "date"
                                    showHelp   = "TRUE"
                                    value = "<%= sy-datum  %>"
                                    visible    = "true"
                                    disabled   = "false"
                                    required   = "true"
                                    maxlength  = "10"
                                    size       = "10"
                                    doValidate = "true"
                                    design     = "standard" />
    For other type of fields check out this weblog by Thomas Jung
    <a href="/people/thomas.jung3/blog/2005/08/22/bsp-value-input-help-popups-version-30 Value Input Help Popups Version 3.0</a>
    Regards
    Raja

  • Kl_virtual_keyboard_secure_input="on" validation error

    It looks like BC default inserts this in the input tag of a search form.
    kl_virtual_keyboard_secure_input="on"
    Wanted to know if anyone has experienced problems if its removed? w3c fails validation because of it:
    …="cat_textbox_small" id="CAT_Search" /><input type="submit" class="cat_button"…
    Attributes for element input:
    Global attributes
    accept when type is file
    alt when type is image
    autocomplete when type is text, search, url, tel, e-mail, password, datetime, date, month, week, time, datetime-local, number, range, or color
    autofocus
    checked when type is checkbox or radio
    dirname when type is text or search
    disabled
    form
    formaction when type is submit or image
    formenctype when type is submit or image
    formmethod when type is submit or image
    formnovalidate when type is submit or image
    formtarget when type is submit or image
    height when type is image
    list when type is text, search, url, tel, e-mail, datetime, date, month, week, time, datetime-local, number, range, or color
    max when type is datetime, date, month, week, time, datetime-local, number, or range
    maxlength when type is text, search, url, tel, e-mail, or password
    min when type is datetime, date, month, week, time, datetime-local, number, or range
    multiple when type is email or file
    name
    pattern when type is text, search, url, tel, e-mail, or password
    placeholder when type is text, search, url, tel, e-mail, password, or number
    readonly when type is text, search, url, tel, e-mail, password, datetime, date, month, week, time, datetime-local, or number
    required when type is text, search, url, tel, e-mail, password, datetime, date, month, week, time, datetime-local, number, checkbox, radio, or file
    size when type is text, search, url, tel, e-mail, or password
    src when type is image
    step when type is datetime, date, month, week, time, datetime-local, number, or range
    type
    value when type is not file or image
    width when type is image

    Hi Steven
    Yes, I did play with the settings in the XML Profile, it is set to:
    All
    true
    Regarding the link you posted, i don't think that it is the same problem. Certificate validation works, as long as I don't enable anyconnect always-on.

  • On a form w Validation, how to redirect to a custom page

    Hi. I have created a form in Dreamweaver CS5 that uses spry validation successfully. Once the form is submitted, the user is redirected to the home page. But I don't want that redirect.
    My question is, how can I have the validated page redirect to a custom thank you page I designed? I don't know the exact code/syntax to write to make it do what I want and, even if I had the code, I wouldn't know exactly where it should be placed. Please help if you can. Here's the source code. )BTW, when I use Dreamweaver Behaviors to add a URL redirect, it ignores the required validation and simply allows you to click the submit button and redirect.) Many thanks!
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="UTF-8">
    <link href="../_css/main.css" rel="stylesheet" media="screen, projection">
    <link href="../_css/forms.css" rel="stylesheet" media="screen, projection">
    <title></title>
    <!--[if lt IE 9]>
    <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script><![endif]-->
    <script src="../SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
    <link href="../SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css">
    <script type="text/javascript">
    <!-- **** I think the line of code for the redirect is here??...I just don't know how to write the code to redirect to the page I want ***** -->
    function MM_goToURL() { //v3.0
      var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
      for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
    </script>
    </head>
    <body>
    <header id="pageHeader">
    <a href="../index.htm"><img src="../_images/logo.gif" width="170" height="91" alt="HMN logo" id="logo"></a>
    <img src="../_images/tagline.png" width="296" height="92" alt="HMN tagline" id="tagline">
    </header>
    <nav id="mainNav">
    <ul>
    <li><a href="../index.htm">Home</a></li>
    <li><a href="../press.htm">Press</a></li>
    <li><a href="../about.htm">About</a></li>
    <li><a href="../contact.htm">Contact</a></li>
    </ul>
    </nav>
    <br class="clear">
    <div class="headerContact">
    </div>
    <article>
      <!-- The file webformmailer.php sits on the web server at godaddy.com in case that matters -->
    <section id="Request">
    <p id="intro">To request your link for the downloadable <span id="highlight">Media Kit</span>, please provide the following information:</p>
    <form name="Request" method="post" action="../../webformmailer.php"> <p id="formCaption">Fields marked with * are required.</p>
      <p><span id="sprytextfield1">
        <label for="first_name">First Name:*</label>
        <input type="text" name="first_name" id="first_name">
        <span class="textfieldRequiredMsg">(required)</span></span></p>
      <p><span id="sprytextfield2">
        <label for="last_name">Last Name:*</label>
        <input type="text" name="last_name" id="last_name">
        <span class="textfieldRequiredMsg">(required)</span></span></p>
      <p><span id="sprytextfield3">
        <label for="company">Company:*</label>
        <input type="text" name="company" id="company">
        <span class="textfieldRequiredMsg">(required)</span></span></p>
      <p>
        <label for="address">Address:</label>
        <input type="text" name="address" id="address">
      </p>
      <p>
        <label for="address_2">Address 2:</label>
        <input type="text" name="address_2" id="address_2">
      </p>
      <p>
        <label for="city">City:</label>
        <input type="text" name="city" id="city">
      </p>
      <p>
        <label for="state">State:</label>
        <input type="text" name="state" id="state">
      </p>
      <p>
        <label for="zip">Zip:</label>
        <input type="text" name="zip" id="zip">
      </p>
      <p><span id="sprytextfield4">
      <label for="email">Email:*</label>
      <input type="text" name="email" id="email">
      <span class="textfieldRequiredMsg">(required)</span><span class="textfieldInvalidFormatMsg">Invalid format.</span></span> </p>
      <p>
      <input name="submit" type="image" id="submit" onClick="MM_goToURL('parent','media_kit_download.htm');return document.MM_returnValue" src="../_images/btn_submit.png">
      </p>
      <p> </p>
    </form>
    <p>
    </p>
    </div>
    </div>
    </section>
    </article>
    <script type="text/javascript">
    var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1", "none", {validateOn:["blur"]});
    var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2", "none", {validateOn:["blur"]});
    var sprytextfield3 = new Spry.Widget.ValidationTextField("sprytextfield3", "none", {validateOn:["blur"]});
    var sprytextfield4 = new Spry.Widget.ValidationTextField("sprytextfield4", "email", {validateOn:["blur"]});
    </script>
    </body>
    </html>

    Thanks for replying. The  URL you've bolded is actually the correct page I'd like the redirect to go to when the form is successfully submitted after validation. But for some reason, that URL request is being ignored and the redirect brings me back to the index page in the root directory. I don't see anywhere in the code that makes the request to do that. Unless that's a default behavior if I've gotten the redirect wrong?
    I don't know if this is helpful, but there is also a .js file that Dreamweaver created and attached to the above HTML source file. The .js file appears to have all the spry code validation including code for features and widgets I'm not even using. I searched through the code several times trying to identify where there might be a redirect to the index page but didn't recognize anything that made sense to me. Here is the complete, unedited file:
    // SpryValidationTextField.js - version 0.38 - Spry Pre-Release 1.6.1
    // Copyright (c) 2006. Adobe Systems Incorporated.
    // All rights reserved.
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions are met:
    //   * Redistributions of source code must retain the above copyright notice,
    //     this list of conditions and the following disclaimer.
    //   * Redistributions in binary form must reproduce the above copyright notice,
    //     this list of conditions and the following disclaimer in the documentation
    //     and/or other materials provided with the distribution.
    //   * Neither the name of Adobe Systems Incorporated nor the names of its
    //     contributors may be used to endorse or promote products derived from this
    //     software without specific prior written permission.
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    // POSSIBILITY OF SUCH DAMAGE.
    (function() { // BeginSpryComponent
    if (typeof Spry == "undefined") window.Spry = {}; if (!Spry.Widget) Spry.Widget = {};
    Spry.Widget.BrowserSniff = function()
        var b = navigator.appName.toString();
        var up = navigator.platform.toString();
        var ua = navigator.userAgent.toString();
        this.mozilla = this.ie = this.opera = this.safari = false;
        var re_opera = /Opera.([0-9\.]*)/i;
        var re_msie = /MSIE.([0-9\.]*)/i;
        var re_gecko = /gecko/i;
        var re_safari = /(applewebkit|safari)\/([\d\.]*)/i;
        var r = false;
        if ( (r = ua.match(re_opera))) {
            this.opera = true;
            this.version = parseFloat(r[1]);
        } else if ( (r = ua.match(re_msie))) {
            this.ie = true;
            this.version = parseFloat(r[1]);
        } else if ( (r = ua.match(re_safari))) {
            this.safari = true;
            this.version = parseFloat(r[2]);
        } else if (ua.match(re_gecko)) {
            var re_gecko_version = /rv:\s*([0-9\.]+)/i;
            r = ua.match(re_gecko_version);
            this.mozilla = true;
            this.version = parseFloat(r[1]);
        this.windows = this.mac = this.linux = false;
        this.Platform = ua.match(/windows/i) ? "windows" :
                        (ua.match(/linux/i) ? "linux" :
                        (ua.match(/mac/i) ? "mac" :
                        ua.match(/unix/i)? "unix" : "unknown"));
        this[this.Platform] = true;
        this.v = this.version;
        if (this.safari && this.mac && this.mozilla) {
            this.mozilla = false;
    Spry.is = new Spry.Widget.BrowserSniff();
    Spry.Widget.ValidationTextField = function(element, type, options)
        type = Spry.Widget.Utils.firstValid(type, "none");
        if (typeof type != 'string') {
            this.showError('The second parameter in the constructor should be the validation type, the options are the third parameter.');
            return;
        if (typeof Spry.Widget.ValidationTextField.ValidationDescriptors[type] == 'undefined') {
            this.showError('Unknown validation type received as the second parameter.');
            return;
        options = Spry.Widget.Utils.firstValid(options, {});
        this.type = type;
        if (!this.isBrowserSupported()) {
            //disable character masking and pattern behaviors for low level browsers
            options.useCharacterMasking = false;
        this.init(element, options);
        //make sure we validate at least on submit
        var validateOn = ['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn, []));
        validateOn = validateOn.join(",");
        this.validateOn = 0;
        this.validateOn = this.validateOn | (validateOn.indexOf('submit') != -1 ? Spry.Widget.ValidationTextField.ONSUBMIT : 0);
        this.validateOn = this.validateOn | (validateOn.indexOf('blur') != -1 ? Spry.Widget.ValidationTextField.ONBLUR : 0);
        this.validateOn = this.validateOn | (validateOn.indexOf('change') != -1 ? Spry.Widget.ValidationTextField.ONCHANGE : 0);
        if (Spry.Widget.ValidationTextField.onloadDidFire)
            this.attachBehaviors();
        else
            Spry.Widget.ValidationTextField.loadQueue.push(this);
    Spry.Widget.ValidationTextField.ONCHANGE = 1;
    Spry.Widget.ValidationTextField.ONBLUR = 2;
    Spry.Widget.ValidationTextField.ONSUBMIT = 4;
    Spry.Widget.ValidationTextField.ERROR_REQUIRED = 1;
    Spry.Widget.ValidationTextField.ERROR_FORMAT = 2;
    Spry.Widget.ValidationTextField.ERROR_RANGE_MIN = 4;
    Spry.Widget.ValidationTextField.ERROR_RANGE_MAX = 8;
    Spry.Widget.ValidationTextField.ERROR_CHARS_MIN = 16;
    Spry.Widget.ValidationTextField.ERROR_CHARS_MAX = 32;
    /* validation parameters:
    *  - characterMasking : prevent typing of characters not matching an regular expression
    *  - regExpFilter : additional regular expression to disalow typing of characters
    *        (like the "-" sign in the middle of the value); use for partial matching of the currently typed value;
    *         the typed value must match regExpFilter at any moment
    *  - pattern : enforce character on each position inside a pattern (AX0?)
    *  - validation : function performing logic validation; return false if failed and the typedValue value on success
    *  - minValue, maxValue : range validation; check if typedValue inside the specified range
    *  - minChars, maxChars : value length validation; at least/at most number of characters
    Spry.Widget.ValidationTextField.ValidationDescriptors = {
        'none': {
        'custom': {
        'integer': {
            characterMasking: /[\-\+\d]/,
            regExpFilter: /^[\-\+]?\d*$/,
            validation: function(value, options) {
                if (value == '' || value == '-' || value == '+') {
                    return false;
                var regExp = /^[\-\+]?\d*$/;
                if (!regExp.test(value)) {
                    return false;
                options = options || {allowNegative:false};
                var ret = parseInt(value, 10);
                if (!isNaN(ret)) {
                    var allowNegative = true;
                    if (typeof options.allowNegative != 'undefined' && options.allowNegative == false) {
                        allowNegative = false;
                    if (!allowNegative && value < 0) {
                        ret = false;
                } else {
                    ret = false;
                return ret;
        'real': {
            characterMasking: /[\d\.,\-\+e]/i,
            regExpFilter: /^[\-\+]?\d(?:|\.,\d{0,2})|(?:|e{0,1}[\-\+]?\d{0,})$/i,
            validation: function (value, options) {
                var regExp = /^[\+\-]?[0-9]+([\.,][0-9]+)?([eE]{0,1}[\-\+]?[0-9]+)?$/;
                if (!regExp.test(value)) {
                    return false;
                var ret = parseFloat(value);
                if (isNaN(ret)) {
                    ret = false;
                return ret;
        'currency': {
            formats: {
                'dot_comma': {
                    characterMasking: /[\d\.\,\-\+\$]/,
                    regExpFilter: /^[\-\+]?(?:[\d\.]*)+(|\,\d{0,2})$/,
                    validation: function(value, options) {
                        var ret = false;
                        //2 or no digits after the comma
                        if (/^(\-|\+)?\d{1,3}(?:\.\d{3})*(?:\,\d{2}|)$/.test(value) || /^(\-|\+)?\d+(?:\,\d{2}|)$/.test(value)) {
                            value = value.toString().replace(/\./gi, '').replace(/\,/, '.');
                            ret = parseFloat(value);
                        return ret;
                'comma_dot': {
                    characterMasking: /[\d\.\,\-\+\$]/,
                    regExpFilter: /^[\-\+]?(?:[\d\,]*)+(|\.\d{0,2})$/,
                    validation: function(value, options) {
                        var ret = false;
                        //2 or no digits after the comma
                        if (/^(\-|\+)?\d{1,3}(?:\,\d{3})*(?:\.\d{2}|)$/.test(value) || /^(\-|\+)?\d+(?:\.\d{2}|)$/.test(value)) {
                            value = value.toString().replace(/\,/gi, '');
                            ret = parseFloat(value);
                        return ret;
        'email': {
            characterMasking: /[^\s]/,
            validation: function(value, options) {
                var rx = /^[\w\.-]+@[\w\.-]+\.\w+$/i;
                return rx.test(value);
        'date': {
            validation: function(value, options) {
                var formatRegExp = /^([mdy]+)[\.\-\/\\\s]+([mdy]+)[\.\-\/\\\s]+([mdy]+)$/i;
                var valueRegExp = this.dateValidationPattern;
                var formatGroups = options.format.match(formatRegExp);
                var valueGroups = value.match(valueRegExp);
                if (formatGroups !== null && valueGroups !== null) {
                    var dayIndex = -1;
                    var monthIndex = -1;
                    var yearIndex = -1;
                    for (var i=1; i<formatGroups.length; i++) {
                        switch (formatGroups[i].toLowerCase()) {
                            case "dd":
                                dayIndex = i;
                                break;
                            case "mm":
                                monthIndex = i;
                                break;
                            case "yy":
                            case "yyyy":
                                yearIndex = i;
                                break;
                    if (dayIndex != -1 && monthIndex != -1 && yearIndex != -1) {
                        var maxDay = -1;
                        var theDay = parseInt(valueGroups[dayIndex], 10);
                        var theMonth = parseInt(valueGroups[monthIndex], 10);
                        var theYear = parseInt(valueGroups[yearIndex], 10);
                        // Check month value to be between 1..12
                        if (theMonth < 1 || theMonth > 12) {
                            return false;
                        // Calculate the maxDay according to the current month
                        switch (theMonth) {
                            case 1:    // January
                            case 3: // March
                            case 5: // May
                            case 7: // July
                            case 8: // August
                            case 10: // October
                            case 12: // December
                                maxDay = 31;
                                break;
                            case 4:    // April
                            case 6: // June
                            case 9: // September
                            case 11: // November
                                maxDay = 30;
                                break;
                            case 2: // February
                                if ((parseInt(theYear/4, 10) * 4 == theYear) && (theYear % 100 != 0 || theYear % 400 == 0)) {
                                    maxDay = 29;
                                } else {
                                    maxDay = 28;
                                break;
                        // Check day value to be between 1..maxDay
                        if (theDay < 1 || theDay > maxDay) {
                            return false;
                        // If successfull we'll return the date object
                        return (new Date(theYear, theMonth - 1, theDay));   //JavaScript requires a month between 0 and 11
                } else {
                    return false;
        'time': {
            validation: function(value, options) {
                //    HH:MM:SS T
                var formatRegExp = /([hmst]+)/gi;
                var valueRegExp = /(\d+|AM?|PM?)/gi;
                var formatGroups = options.format.match(formatRegExp);
                var valueGroups = value.match(valueRegExp);
                //mast match and have same length
                if (formatGroups !== null && valueGroups !== null) {
                    if (formatGroups.length != valueGroups.length) {
                        return false;
                    var hourIndex = -1;
                    var minuteIndex = -1;
                    var secondIndex = -1;
                    //T is AM or PM
                    var tIndex = -1;
                    var theHour = 0, theMinute = 0, theSecond = 0, theT = 'AM';
                    for (var i=0; i<formatGroups.length; i++) {
                        switch (formatGroups[i].toLowerCase()) {
                            case "hh":
                                hourIndex = i;
                                break;
                            case "mm":
                                minuteIndex = i;
                                break;
                            case "ss":
                                secondIndex = i;
                                break;
                            case "t":
                            case "tt":
                                tIndex = i;
                                break;
                    if (hourIndex != -1) {
                        var theHour = parseInt(valueGroups[hourIndex], 10);
                        if (isNaN(theHour) || theHour > (formatGroups[hourIndex] == 'HH' ? 23 : 12 )) {
                            return false;
                    if (minuteIndex != -1) {
                        var theMinute = parseInt(valueGroups[minuteIndex], 10);
                        if (isNaN(theMinute) || theMinute > 59) {
                            return false;
                    if (secondIndex != -1) {
                        var theSecond = parseInt(valueGroups[secondIndex], 10);
                        if (isNaN(theSecond) || theSecond > 59) {
                            return false;
                    if (tIndex != -1) {
                        var theT = valueGroups[tIndex].toUpperCase();
                        if (
                            formatGroups[tIndex].toUpperCase() == 'TT' && !/^a|pm$/i.test(theT) ||
                            formatGroups[tIndex].toUpperCase() == 'T' && !/^a|p$/i.test(theT)
                            return false;
                    var date = new Date(2000, 0, 1, theHour + (theT.charAt(0) == 'P'?12:0), theMinute, theSecond);
                    return date;
                } else {
                    return false;
        'credit_card': {
            characterMasking: /\d/,
            validation: function(value, options) {
                var regExp = null;
                options.format = options.format || 'ALL';
                switch (options.format.toUpperCase()) {
                    case 'ALL': regExp = /^[3-6]{1}[0-9]{12,18}$/; break;
                    case 'VISA': regExp = /^4(?:[0-9]{12}|[0-9]{15})$/; break;
                    case 'MASTERCARD': regExp = /^5[1-5]{1}[0-9]{14}$/; break;
                    case 'AMEX': regExp = /^3(4|7){1}[0-9]{13}$/; break;
                    case 'DISCOVER': regExp = /^6011[0-9]{12}$/; break;
                    case 'DINERSCLUB': regExp = /^3(?:(0[0-5]{1}[0-9]{11})|(6[0-9]{12})|(8[0-9]{12}))$/; break;
                if (!regExp.test(value)) {
                    return false;
                var digits = [];
                var j = 1, digit = '';
                for (var i = value.length - 1; i >= 0; i--) {
                    if ((j%2) == 0) {
                        digit = parseInt(value.charAt(i), 10) * 2;
                        digits[digits.length] = digit.toString().charAt(0);
                        if (digit.toString().length == 2) {
                            digits[digits.length] = digit.toString().charAt(1);
                    } else {
                        digit = value.charAt(i);
                        digits[digits.length] = digit;
                    j++;
                var sum = 0;
                for(i=0; i < digits.length; i++ ) {
                    sum += parseInt(digits[i], 10);
                if ((sum%10) == 0) {
                    return true;
                return false;
        'zip_code': {
            formats: {
                'zip_us9': {
                    pattern:'00000-0000'
                'zip_us5': {
                    pattern:'00000'
                'zip_uk': {
                    characterMasking: /[\dA-Z\s]/,
                    validation: function(value, options) {
                        //check one of the following masks
                        // AN NAA, ANA NAA, ANN NAA, AAN NAA, AANA NAA, AANN NAA
                        return /^[A-Z]{1,2}\d[\dA-Z]?\s?\d[A-Z]{2}$/.test(value);
                'zip_canada': {
                    characterMasking: /[\dA-Z\s]/,
                    pattern: 'A0A 0A0'
                'zip_custom': {}
        'phone_number': {
            formats: {
                //US phone number; 10 digits
                'phone_us': {
                    pattern:'(000) 000-0000'
                'phone_custom': {}
        'social_security_number': {
            pattern:'000-00-0000'
        'ip': {
            characterMaskingFormats: {
                'ipv4': /[\d\.]/i,
                'ipv6_ipv4': /[\d\.\:A-F\/]/i,
                'ipv6': /[\d\.\:A-F\/]/i
            validation: function (value, options) {
                return Spry.Widget.ValidationTextField.validateIP(value, options.format);
        'url': {
            characterMasking: /[^\s]/,
            validation: function(value, options) {
                //fix for ?ID=223429 and ?ID=223387
                /* the following regexp matches components of an URI as specified in http://tools.ietf.org/html/rfc3986#page-51 page 51, Appendix B.
                    scheme    = $2
                    authority = $4
                    path      = $5
                    query     = $7
                    fragment  = $9
                var URI_spliter = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
                var parts = value.match(URI_spliter);
                if (parts && parts[4]) {
                    //encode each component of the domain name using Punycode encoding scheme: http://tools.ietf.org/html/rfc3492
                    var host  = parts[4].split(".");
                    var punyencoded = '';
                    for (var i=0; i<host.length; i++) {
                        punyencoded = Spry.Widget.Utils.punycode_encode(host[i], 64);
                        if (!punyencoded) {
                            return false;
                        } else {
                            if (punyencoded != (host[i] + "-")) {
                                host[i] = 'xn--' + punyencoded;
                    host = host .join(".");
                    //the encoded domain name is replaced into the original URL to be validated again later as URL
                    value = value.replace(URI_spliter, "$1//" + host + "$5$6$8");
                //fix for ?ID=223358 and ?ID=223594
                //the following validates an URL using ABNF rules as defined in http://tools.ietf.org/html/rfc3986 , Appendix A., page 49
                //except host which is extracted by match[1] and validated separately
                 * userinfo=    (?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=:]|%[0-9a-f]{2,2})*\@)?
                 * host=            (?:((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z][a-z0-9\-]*[a-z0-9]|[a-z])|(?: \[[^\]]*\]))
                 * pathname=    (?:\/(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@]|%[0-9a-f]{2,2})*)*
                 * query=            (?:\?(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?
                 * anchor=        (?:\#(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?
                var regExp = /^(?:https?|ftp)\:\/\/(?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=:]|%[0-9a-f]{2,2})*\@)?(?: ((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z][a-z0-9\-]*[a-z0-9]|[a-z])|(?:\[[^ \]]*\]))(?:\:[0-9]*)?)(?:\/(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@]|%[0-9a-f]{2,2})*)*( ?:\?(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?(?:\#(?:[a-z0-9\-\._ ~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?$/i;
                var valid = value.match(regExp);
                if (valid) {
                    //extract the  address from URL
                    var address = valid[1];
                    if (address) {
                        if (address == '[]') {
                            return false;
                        if (address.charAt(0) == '[' ) {
                            //IPv6 address or IPv4 enclosed in square brackets
                            address = address.replace(/^\[|\]$/gi, '');
                            return Spry.Widget.ValidationTextField.validateIP(address, 'ipv6_ipv4');
                        } else {
                            if (/[^0-9\.]/.test(address)) {
                                return true;
                            } else {
                                //check if hostname is all digits and dots and then check for IPv4
                                return Spry.Widget.ValidationTextField.validateIP(address, 'ipv4');
                    } else {
                        return true;
                } else {
                    return false;
    2.2.1. Preferred
    x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal values of the eight 16-bit pieces of the address.
    Examples:
        FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
        1080:0:0:0:8:800:200C:417A
    Note that it is not necessary to write the leading zeros in an
    individual field, but there must be at least one numeral in every
    field (except for the case described in 2.2.2.).
    2.2.2. Compressed
    The use of "::" indicates multiple groups of 16-bits of zeros.
    The "::" can only appear once in an address.  The "::" can also be
    used to compress the leading and/or trailing zeros in an address.
        1080:0:0:0:8:800:200C:417A --> 1080::8:800:200C:417A
        FF01:0:0:0:0:0:0:101 --> FF01::101
        0:0:0:0:0:0:0:1 --> ::1
        0:0:0:0:0:0:0:0 --> ::
    2.5.4 IPv6 Addresses with Embedded IPv4 Addresses
        IPv4-compatible IPv6 address (tunnel IPv6 packets over IPv4 routing infrastructures)
        ::0:129.144.52.38
        IPv4-mapped IPv6 address (represent the addresses of IPv4-only nodes as IPv6 addresses)
        ::ffff:129.144.52.38
    The text representation of IPv6 addresses and prefixes in Augmented BNF (Backus-Naur Form) [ABNF] for reference purposes.
    [ABNF http://tools.ietf.org/html/rfc2234]
          IPv6address = hexpart [ ":" IPv4address ]
          IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
          IPv6prefix  = hexpart "/" 1*2DIGIT
          hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
          hexseq  = hex4 *( ":" hex4)
          hex4    = 1*4HEXDIG
    Spry.Widget.ValidationTextField.validateIP = function (value, format)
        var validIPv6Addresses = [
            //preferred
            /^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}(?:\/\d{1,3})?$/i,
            //various compressed
            /^[a-f0-9]{0,4}::(?:\/\d{1,3})?$/i,
            /^:(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){1,6}:(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,5}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,4}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}){1,3}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){5}(?::[a-f0-9]{1,4}){1,2}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){6}(?::[a-f0-9]{1,4})(?:\/\d{1,3})?$/i,
            //IPv6 mixes with IPv4
            /^(?:[a-f0-9]{1,4}:){6}(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
            /^:(?::[a-f0-9]{1,4}){0,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){1,5}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,3}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,    
            /^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,2}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,
            /^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}):(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i
        var validIPv4Addresses = [
            //IPv4
            /^(\d{1,3}\.){3}\d{1,3}$/i
        var validAddresses = [];
        if (format == 'ipv6' || format == 'ipv6_ipv4') {
            validAddresses = validAddresses.concat(validIPv6Addresses);
        if (format == 'ipv4' || format == 'ipv6_ipv4') {
            validAddresses = validAddresses.concat(validIPv4Addresses);
        var ret = false;
        for (var i=0; i<validAddresses.length; i++) {
            if (validAddresses[i].test(value)) {
                ret = true;
                break;
        if (ret && value.indexOf(".") != -1) {
            //if address contains IPv4 fragment, it must be valid; all 4 groups must be less than 256
            var ipv4 = value.match(/:?(?:\d{1,3}\.){3}\d{1,3}/i);
            if(!ipv4) {
                return false;
            ipv4 = ipv4[0].replace(/^:/, '');
            var pieces = ipv4.split('.');
            if (pieces.length != 4) {
                return false;
            var regExp = /^[\-\+]?\d*$/;
            for (var i=0; i< pieces.length; i++) {
                if (pieces[i] == '') {
                    return false;
                var piece = parseInt(pieces[i], 10);
                if (isNaN(piece) || piece > 255 || !regExp.test(pieces[i]) || pieces[i].length>3 || /^0{2,3}$/.test(pieces[i])) {
                    return false;
        if (ret && value.indexOf("/") != -1) {
            // if prefix-length is specified must be in [1-128]
            var prefLen = value.match(/\/\d{1,3}$/);
            if (!prefLen) return false;
            var prefLenVal = parseInt(prefLen[0].replace(/^\//,''), 10);
            if (isNaN(prefLenVal) || prefLenVal > 128 || prefLenVal < 1) {
                return false;
        return ret;
    Spry.Widget.ValidationTextField.onloadDidFire = false;
    Spry.Widget.ValidationTextField.loadQueue = [];
    Spry.Widget.ValidationTextField.prototype.isBrowserSupported = function()
        return Spry.is.ie && Spry.is.v >= 5 && Spry.is.windows
            ||
        Spry.is.mozilla && Spry.is.v >= 1.4
            ||
        Spry.is.safari
            ||
        Spry.is.opera && Spry.is.v >= 9;
    Spry.Widget.ValidationTextField.prototype.init = function(element, options)
        this.element = this.getElement(element);
        this.errors = 0;
        this.flags = {locked: false, restoreSelection: true};
        this.options = {};
        this.event_handlers = [];
        this.validClass = "textfieldValidState";
        this.focusClass = "textfieldFocusState";
        this.requiredClass = "textfieldRequiredState";
        this.hintClass = "textfieldHintState";
        this.invalidFormatClass = "textfieldInvalidFormatState";
        this.invalidRangeMinClass = "textfieldMinValueState";
        this.invalidRangeMaxClass = "textfieldMaxValueState";
        this.invalidCharsMinClass = "textfieldMinCharsState";
        this.invalidCharsMaxClass = "textfieldMaxCharsState";
        this.textfieldFlashTextClass = "textfieldFlashText";
        if (Spry.is.safari) {
            this.flags.lastKeyPressedTimeStamp = 0;
        switch (this.type) {
            case 'phone_number':options.format = Spry.Widget.Utils.firstValid(options.format, 'phone_us');break;
            case 'currency':options.format = Spry.Widget.Utils.firstValid(options.format, 'comma_dot');break;
            case 'zip_code':options.format = Spry.Widget.Utils.firstValid(options.format, 'zip_us5');break;
            case 'date':
                options.format = Spry.Widget.Utils.firstValid(options.format, 'mm/dd/yy');
                break;
            case 'time':
                options.format = Spry.Widget.Utils.firstValid(options.format, 'HH:mm');
                options.pattern = options.format.replace(/[hms]/gi, "0").replace(/TT/gi, 'AM').replace(/T/gi, 'A');
                break;
            case 'ip':
                options.format = Spry.Widget.Utils.firstValid(options.format, 'ipv4');
                options.characterMasking = Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].characterMaskingFormats[ options.format];
                break;
        //retrieve the validation type descriptor to be used with this instance (base on type and format)
        //widgets may have different validations depending on format (like zip_code with formats)
        var validationDescriptor = {};
        if (options.format && Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats) {
            if (Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats[options.format] ) {
                Spry.Widget.Utils.setOptions(validationDescriptor, Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats[options.format]) ;
        } else {
            Spry.Widget.Utils.setOptions(validationDescriptor, Spry.Widget.ValidationTextField.ValidationDescriptors[this.type]);
        //set default values for some parameters which were not aspecified
        options.useCharacterMasking = Spry.Widget.Utils.firstValid(options.useCharacterMasking, false);
        options.hint = Spry.Widget.Utils.firstValid(options.hint, '');
        options.isRequired = Spry.Widget.Utils.firstValid(options.isRequired, true);
        options.additionalError = Spry.Widget.Utils.firstValid(options.additionalError, false);
        if (options.additionalError)
            options.additionalError = this.getElement(options.additionalError);
        //set widget validation parameters
        //get values from validation type descriptor
        //use the user specified values, if defined
        options.characterMasking = Spry.Widget.Utils.firstValid(options.characterMasking, validationDescriptor.characterMasking);
        options.regExpFilter = Spry.Widget.Utils.firstValid(options.regExpFilter, validationDescriptor.regExpFilter);
        options.pattern = Spry.Widget.Utils.firstValid(options.pattern, validationDescriptor.pattern);
        options.validation = Spry.Widget.Utils.firstValid(options.validation, validationDescriptor.validation);
        if (typeof options.validation == 'string') {
            options.validation = eval(options.validation);
        options.minValue = Spry.Widget.Utils.firstValid(options.minValue, validationDescriptor.minValue);
        options.maxValue = Spry.Widget.Utils.firstValid(options.maxValue, validationDescriptor.maxValue);
        options.minChars = Spry.Widget.Utils.firstValid(options.minChars, validationDescriptor.minChars);
        options.maxChars = Spry.Widget.Utils.firstValid(options.maxChars, validationDescriptor.maxChars);
        Spry.Widget.Utils.setOptions(this, options);
        Spry.Widget.Utils.setOptions(this.options, options);
    Spry.Widget.ValidationTextField.prototype.destroy = function() {
        if (this.event_handlers)
            for (var i=0; i<this.event_handlers.length; i++) {
                Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0], this.event_handlers[i][1], this.event_handlers[i][2], false);
        try { delete this.element; } catch(err) {}
        try { delete this.input; } catch(err) {}
        try { delete this.form; } catch(err) {}
        try { delete this.event_handlers; } catch(err) {}
        try { this.selection.destroy(); } catch(err) {}
        try { delete this.selection; } catch(err) {}
        var q = Spry.Widget.Form.onSubmitWidgetQueue;
        var qlen = q.length;
        for (var i = 0; i < qlen; i++) {
            if (q[i] == this) {
                q.splice(i, 1);
                break;
    Spry.Widget.ValidationTextField.prototype.attachBehaviors = function()
        if (this.element) {
            if (this.element.nodeName == "INPUT") {
                this.input = this.element;
            } else {
                this.input = Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element, "INPUT");
        if (this.input) {
            if (this.maxChars) {
                this.input.removeAttribute("maxLength");
            this.putHint();
            this.compilePattern();
            if (this.type == 'date') {
                this.compileDatePattern();
            this.input.setAttribute("AutoComplete", "off");
            this.selection = new Spry.Widget.SelectionDescriptor(this.input);
            this.oldValue = this.input.value;
            var self = this;
            this.event_handlers = [];
            this.event_handlers.push([this.input, "keydown", function(e) { if (self.isDisabled()) return true; return self.onKeyDown(e || event); }]);
            this.event_handlers.push([this.input, "keypress", function(e) { if (self.isDisabled()) return true; return self.onKeyPress(e || event); }]);
            if (Spry.is.opera) {
                this.event_handlers.push([this.input, "keyup", function(e) { if (self.isDisabled()) return true; return self.onKeyUp(e || event); }]);
            this.event_handlers.push([this.input, "focus", function(e) { if (self.isDisabled()) return true; return self.onFocus(e || event); }]);
            this.event_handlers.push([this.input, "blur", function(e) { if (self.isDisabled()) return true; return self.onBlur(e || event); }]);
            this.event_handlers.push([this.input, "mousedown", function(e) { if (self.isDisabled()) return true; return self.onMouseDown(e || event); }]);
            var changeEvent =
                Spry.is.mozilla || Spry.is.opera || Spry.is.safari?"input":
                Spry.is.ie?"propertychange":
                "change";
            this.event_handlers.push([this.input, changeEvent, function(e) { if (self.isDisabled()) return true; return self.onChange(e || event); }]);
            if (Spry.is.mozilla || Spry.is.safari) {
                //oninput event on mozilla does not fire ondragdrop
                this.event_handlers.push([this.input, "dragdrop", function(e) { if (self.isDisabled()) return true; self.removeHint();return self.onChange(e || event); }]);
            } else if (Spry.is.ie){
                //ondrop&onpropertychange crash on IE
                this.event_handlers.push([this.input, "drop", function(e) { if (self.isDisabled()) return true; return self.onDrop(e || event); }]);
            for (var i=0; i<this.event_handlers.length; i++) {
                Spry.Widget.Utils.addEventListener(this.event_handlers[i][0], this.event_handlers[i][1], this.event_handlers[i][2], false);
            // submit
            this.form = Spry.Widget.Utils.getFirstParentWithNodeName(this.input, "FORM");
            if (this.form) {
                // if no "onSubmit" handler has been attached to the current form, attach one
                if (!this.form.attachedSubmitHandler && !this.form.onsubmit) {
                    this.form.onsubmit = function(e) { e = e || event; return Spry.Widget.Form.onSubmit(e, e.srcElement || e.currentTarget) };
                    this.form.attachedSubmitHandler = true;                
                if (!this.form.attachedResetHandler) {
                    Spry.Widget.Utils.addEventListener(this.form, "reset", function(e) { e = e || event; return Spry.Widget.Form.onReset(e, e.srcElement || e.currentTarget) }, false);
                    this.form.attachedResetHandler = true;                
                // add the currrent widget to the "onSubmit" check queue;
                Spry.Widget.Form.onSubmitWidgetQueue.push(this);
    Spry.Widget.ValidationTextField.prototype.isDisabled = function() {
        return this.input && (this.input.disabled || this.input.readOnly) || !this.input;
    Spry.Widget.ValidationTextField.prototype.getElement = function(ele)
        if (ele && typeof ele == "string")
            return document.getElementById(ele);
        return ele;
    Spry.Widget.ValidationTextField.addLoadListener = function(handler)
        if (typeof window.addEventListener != 'undefined')
            window.addEventListener('load', handler, false);
        else if (typeof document.addEventListener != 'undefined')
            document.addEventListener('load', handler, false);
        else if (typeof window.attachEvent != 'undefined')
            window.attachEvent('onload', handler);
    Spry.Widget.ValidationTextField.processLoadQueue = function(handler)
        Spry.Widget.ValidationTextField.onloadDidFire = true;
        var q = Spry.Widget.ValidationTextField.loadQueue;
        var qlen = q.length;
        for (var i = 0; i < qlen; i++)
            q[i].attachBehaviors();
    Spry.Widget.ValidationTextField.addLoadListener(Spry.Widget.ValidationTextField.processLoa dQueue);
    Spry.Widget.ValidationTextField.addLoadListener(function(){
        Spry.Widget.Utils.addEventListener(window, "unload", Spry.Widget.Form.destroyAll, false);
    Spry.Widget.ValidationTextField.prototype.setValue = function(newValue) {
        this.flags.locked = true;
        this.input.value = newValue;
        this.flags.locked = false;
        this.oldValue = newValue;
        if (!Spry.is.ie) {
            this.onChange();
    * save the state of the input (selection and value) so we can revert to it
    * should call this just before modifying the input value
    Spry.Widget.ValidationTextField.prototype.saveState = function()
        this.oldValue = this.input.value;
        this.selection.update();
    Spry.Widget.ValidationTextField.prototype.revertState = function(revertValue)
        if (revertValue != this.input.value) {
            this.input.readOnly = true;
            this.input.value = revertValue;
            this.input.readOnly = false;
            if (Spry.is.safari && this.flags.active) {
                this.input.focus();
      if (this.flags.restoreSelection) {
        this.selection.moveTo(this.selection.start, this.selection.end);
        this.redTextFlash();
    Spry.Widget.ValidationTextField.prototype.removeHint = function()
        if (this.flags.hintOn) {
            this.input.value = "";
            this.flags.hintOn = false;
            this.removeClassName(this.element, this.hintClass);
            this.removeClassName(this.additionalError, this.hintClass);
    Spry.Widget.ValidationTextField.prototype.putHint = function()
        if(this.hint && this.input && this.input.type == "text" && this.input.value == "") {
            this.flags.hintOn = true;
            this.input.value = this.hint;
            this.addClassName(this.element, this.hintClass);
            this.addClassName(this.additionalError, this.hintClass);
    Spry.Widget.ValidationTextField.prototype.redTextFlash = function()
        var self = this;
        this.addClassName(this.element, this.textfieldFlashTextClass);
        setTimeout(function() {
            self.removeClassName(self.element, self.textfieldFlashTextClass)
        }, 100);
    Spry.Widget.ValidationTextField.prototype.doValidations = function(testValue, revertValue)
        if (this.isDisabled()) return false;
        if (this.flags.locked) {
            return false;
        if (testValue.length == 0 && !this.isRequired) {
            this.errors = 0;
            return false;
        this.flags.locked = true;
        var mustRevert = false;
        var continueValidations = true;
        if (!this.options.isRequired && testValue.length == 0) {
            continueValidations = false;
        var errors = 0;
        var fixedValue = testValue;
        //characterMasking - test if all characters are valid with the characterMasking (keyboard filter)
        if (this.useCharacterMasking && this.characterMasking) {
            for(var i=0; i<testValue.length; i++) {
                if (!this.characterMasking.test(testValue.charAt(i))) {
                    errors = errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
                    fixedValue = revertValue;
                    mustRevert = true;
                    break;
        //regExpFilter - character mask positioning (additional mask to restrict some characters only in some position)
        if (!mustRevert && this.useCharacterMasking && this.regExpFilter) {
            if (!this.regExpFilter.test(fixedValue)) {
                errors = errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
                mustRevert = true;
        //pattern - testValue matches the pattern so far
        if (!mustRevert && this.pattern) {
            var currentRegExp = this.patternToRegExp(testValue.length);
            if (!currentRegExp.test(testValue)) {
                errors = errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
                mustRevert = true;
            } else if (this.patternLength != testValue.length) {
                //testValue matches pattern so far, but it's not ok if it does not have the proper length
                //do not revert, but should show the error
                errors = errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
        if (fixedValue == '') {
            errors = errors | Spry.Widget.ValidationTextField.ERROR_REQUIRED;
        if (!mustRevert && this.pattern && this.useCharacterMasking) {
            var n = this.getAutoComplete(testValue.length);
            if (n) {
                fixedValue += n;
        if(!mustRevert && this.minChars !== null  && continueValidations) {
            if (testValue.length < this.minChars) {
                errors = errors | Spry.Widget.ValidationTextField.ERROR_CHARS_MIN;
                continueValidations = false;
        if(!mustRevert && this.maxChars !== null && continueValidations) {
            if (testValue.length > this.maxChars) {
                errors = errors | Spry.Widget.ValidationTextField.ERROR_CHARS_MAX;
                continueValidations = false;
        //validation - testValue passes widget validation function
        if (!mustRevert && this.validation && continueValidations) {
            var value = this.validation(fixedValue, this.options);
            if (false === value) {
                errors = errors | Spry.Widget.ValidationTextField.ERROR_FORMAT;
                continueValidations = false;
            } else {
                this.typedValue = value;
        if(!mustRevert && this.validation && this.minValue !== null && continueValidations) {
            var minValue = this.validation(this.minValue.toString(), this.options);
            if (minValue !== false) {
                if (this.typedValue < minValue) {
                    errors = errors | Spry.Widget.ValidationTextField.ERROR_RANGE_MIN;
                    continueValidations = false;
        if(!mustRevert && this.validation && this.maxValue !== null && continueValidations) {
            var maxValue = this.validation(this.maxValue.toString(), this.options);
            if (maxValue !== false) {
                if( this.typedValue > maxValue) {
                    errors = errors | Spry.Widget.ValidationTextField.ERROR_RANGE_MAX;
                    continueValidations = false;
        //an invalid value was tested; must make sure it does not get inside the input
        if (this.useCharacterMasking && mustRevert) {
            this.revertState(revertValue);
        this.errors = errors;
        this.fixedValue = fixedValue;
        this.flags.locked = false;
        return mustRevert;
    Spry.Widget.ValidationTextField.prototype.onChange = function(e)
        if (Spry.is.opera && this.flags.operaRevertOnKeyUp) {
            return true;
        if (Spry.is.ie && e && e.propertyName != 'value') {
            return true;

  • Spry Validation Confirm Widget

    Ugh.  This is driving me nuts!
    I've used the Spry Validation Confirm Widget successfully before, but for some reason I can't spot, I get this error message every time I try to load the page: Spry.ValidationConfirm ERR: The element ConfirmPasswordWidget doesn't exists!
    The JS and CSS files are linked as follows in the head section.
    <!-- Link the Spry Validation Password JavaScript library -->
    <script src="SpryAssets/SpryValidationPassword.js" type="text/javascript"></script>
    <!-- Link the CSS style sheet that styles the widget -->
    <link href="SpryAssets/SpryValidationPassword.css" rel="stylesheet" type="text/css" />
    <!-- Link the Spry Validation Confirm JavaScript library -->
    <script src="SpryAssets/SpryValidationConfirm.js" type="text/javascript"></script>
    <!-- Link the CSS style sheet that styles the widget -->
    <link href="SpryAssets/SpryValidationConfirm.css" rel="stylesheet" type="text/css" />
    The code in the body looks like this:
          <form id="Passwordform" name="Passwordform" method="post" action="">
            <table>
              <tr>
                <td><label for="password1">Password:</label></td>
                <td><span id="ValidatePasswordWidget">
                  <input name="password1" type="password" id="password1" value="" size="20" maxlength="20"/>
                  <span class="passwordRequiredMsg">A value is required.</span>
                  <span class="passwordMinCharsMsg">The minimum number of characters not met.</span>
                  <span class="passwordMaxCharsMsg">The maximum number of characters exceeded.</span>
                  <span class="passwordInvalidStrengthMsg">The password strength condition not met.</span>
                  <span class="passwordCustomMsg">User defined condition not met.</span>
                  </span>
                </td>
              </tr>
              <tr>
                <td><label for="confirmpassword">Re-enter password </label></td>
                <td><span id="ConfirmPasswordWidget">
                  <input type="password" id="confirmpassword" value="" size="20" maxlength="20" />
                  <span class="confirmRequiredMsg">A value is required.</span>
                  <span class="confirmInvalidMsg">The values do not match</span>
                  </span>
                </td>
              </tr>
              <tr>
                <td> </td>
                <td><input type="submit" name="submit" value="Submit" />
                </td>
              </tr>
            </table>
          </form>
    The scripts are declared as follows:
    <script type="text/javascript">
       var sprytextfield1      = new Spry.Widget.ValidationTextField("sprytextfield1", "none", {validateOn:["blur"], minChars:7, maxChars:7});
       var password1           = new Spry.Widget.ValidationPassword("ValidatePasswordWidget", {validateOn:["blur"], minAlphaChars:3, minNumbers:1, maxSpecialChars:2, minChars:3, maxChars:8});     
       var ConfirmWidgetObject = new Spry.Widget.ValidationConfirm("ConfirmPasswordWidget", "password1", {validateOn: ['blur']});  </script>
    The actual code is shown below (it doesn't allow me to attach it).
    I know this is a lot to ask, but can anyone see the reason why I'm getting this error?  Looks to me like ConfirmPasswordWidget exists!?
    Thanks in advance.
    <?php require_once('Connections/Unit174Conn.php'); ?>
    <?php if (!isset($_SESSION)) { session_start(); } ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
      $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;   
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      return $theValue;
    $colname_rsACBLNumber = "-1";
    if (isset($_POST['ACBL_Number'])) {
      $colname_rsACBLNumber = $_POST['ACBL_Number'];
    mysql_select_db($database_Unit174Conn, $Unit174Conn);
    $query_rsACBLNumber = sprintf("SELECT * FROM unit174members WHERE ACBLNumber = %s", GetSQLValueString($colname_rsACBLNumber, "text"));
    $rsACBLNumber = mysql_query($query_rsACBLNumber, $Unit174Conn) or die(mysql_error());
    $row_rsACBLNumber = mysql_fetch_assoc($rsACBLNumber);
    $totalRows_rsACBLNumber = mysql_num_rows($rsACBLNumber);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <!-- InstanceBegin template="/Templates/Unit174_Template.dwt" codeOutsideHTMLIsLocked="false" -->
    <head>
    <meta name="verify-v1" content="PiJ9w6m8VEIvYazx7HJBGOw/d9FeOgKQ1+XlIli6oIE=" />
    <!-- InstanceBeginEditable name="doctitle" -->
    <title>Register</title>
    <!-- InstanceEndEditable -->
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Language" content="en-us" />
    <meta http-equiv="Keywords" content="Houston, Bridge, ACBL, Duplicate, Unit 174, District 16, Texas, Results, Community Center, cards, Bridge Club, scores" />
    <meta name="Keywords" content="Houston, Duplicate Bridge, Duplicate, Bridge Unit 174, District 16, ACBL, Tracy Gee, Pech Road, JCC, Ace of Clubs" />
    <link href="css/Unit174.css" rel="stylesheet" type="text/css" />
    <script src="SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
    <link href="SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
    <!-- InstanceBeginEditable name="head" -->
    <link href="css/table_design.css" rel="stylesheet" type="text/css" />
    <script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
    <link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
    <!-- Link the Spry Validation Password JavaScript library -->
    <script src="SpryAssets/SpryValidationPassword.js" type="text/javascript"></script>
    <!-- Link the CSS style sheet that styles the widget -->
    <link href="SpryAssets/SpryValidationPassword.css" rel="stylesheet" type="text/css" />
    <!-- Link the Spry Validation Confirm JavaScript library -->
    <script src="SpryAssets/SpryValidationConfirm.js" type="text/javascript"></script>
    <!-- Link the CSS style sheet that styles the widget -->
    <link href="SpryAssets/SpryValidationConfirm.css" rel="stylesheet" type="text/css" />
    <!-- InstanceEndEditable --><!-- InstanceParam name="Page_ID" type="text" value="Register" --><!-- InstanceParam name="class" type="text" value="Unit174" -->
    </head>
    <body class="Unit174" id="Register">
    <div id="container">
      <div id="header"> <img src="Photos/Pat_Levy.jpg"       alt="Pat Levy"       title="Pat Levy"        width="80" height="100" class="framed_image" /> <img src="Photos/Paul Cuneo.jpg"     alt="Paul Cuneo"     title="Paul Cuneo"      width="80" height="100" class="framed_image" /> <img src="Photos/John_Erickson.jpg"  alt="John Erickson"  title="John Ericson"    width="80" height="100" class="framed_image" /> <img src="Photos/Sue_Adamson.png"    alt="Sue Adamson"    title="Sue Adamson"     width="80" height="100" class="framed_image" /> <img src="Photos/Bob_Dowlen_2.jpg"   alt="Bob Dowlen"     title="Bob Dowlen"      width="80" height="100" class="framed_image" /> <img src="Photos/Lauri_Laufman.jpg"  alt="Lauri Laufman"  title="Lauri Laufman"   width="80" height="100" class="framed_image" /> <img src="Photos/Karen_Nimmons.jpg"  alt="Karen Nimmons"  title="Karen Nimmons"   width="80" height="100" class="framed_image" /> <img src="Photos/Robert_Reichek.png" alt="Robert Reichek" title="Robert Reichek"  width="80" height="100" class="framed_image" /> <img src="Photos/Joyce_Ryan.jpg"     alt="Joyce Ryan"     title="Joyce Ryan"      width="80" height="100" class="framed_image" />
        <h1>The Board of Directors of Houston Unit 174 of the ACBL</h1>
        <h4>Welcomes you to</h4>
        <h1>Houston Duplicate Bridge</h1>
        <!--End header div-->
      </div>
      <div id="NavContainer">
        <ul id="NavList" class="MenuBarHorizontal">
          <li><a href="index.html">Home</a></li>
          <li><a class="MenuBarItemSubmenu" href="#">Unit Pages</a>
            <ul>
              <li><a href="174calendar.htm">Unit 174 Calendar</a></li>
              <li><a href="board_of_directors.htm">Unit board of Directors</a></li>
              <li><a href="minutes.htm">Board Minutes</a></li>
              <li><a href="174finances.htm">Financial Reports</a></li>
              <li><a href="bylaws.htm" target="_blank">Bylaws</a></li>
              <li><a href="mailto:[email protected]">Sign up for Free E-mail Newsletter </a></li>
              <li><a href="http://www.unit174partnership.com/" target="_blank">Find a partner!</a></li>
              <li><a href="#" class="MenuBarItemSubmenu">Honors</a>
                <ul>
                  <li><a href="texas_star.htm">Texas Stars</a></li>
                  <li><a href="charity_committee.htm">Charity Committee</a></li>
                  <li><a href="goodwill_committee.htm">Goodwill Committee</a></li>
                </ul>
              </li>
              <li><a href="memberstats.htm">Membership Charts</a></li>
              <li><a href="Photo_Gallery/gallery.php">Photo Gallery</a></li>
              <li><a href="mapof_174.htm">Unit Map</a></li>
              <li><a href="map.htm">Map with Club Info</a></li>
              <li><a href="Past_Tournaments.htm">Past Tournament Results</a></li>
              <li><a href="club_special_events.htm">Club Special Events</a></li>
              <li><a href="swiss_teams.htm">Swiss Teams</a></li>
              <li><a href="Randall's cards.pdf">Randall's Cards</a></li>
            </ul>
          </li>
          <li><a href="#" class="MenuBarItemSubmenu">Masterpoint Races</a>
            <ul>
              <li><a href="Ace_Of_Clubs.htm" target="_blank">Ace of Clubs</a></li>
              <li><a href="Mini-McKenney.htm" target="_blank">Mini-McKenney</a></li>
              <li><a href="unit_masterpoints.php">Unit masterpoint holdings</a></li>
              <li><a href="2008mpraces.htm">2008 All Races 100 deep</a></li>
            </ul>
          </li>
          <li><a class="MenuBarItemSubmenu" href="#">Newer Player Resources</a>
            <ul>
              <li><a href="novice_games.htm">Intermediate/Novice Games</a></li>
              <li><a href="askateacher.htm">Ask a teacher</a></li>
              <li><a href="bridgelessons.htm">Bridge Lessons</a></li>
              <li><a href="#" class="MenuBarItemSubmenu">Mentor-Mentee Games</a>
                <ul>
                  <li><a href="http://www.bridgeclubofhouston.org/" target="_blank">Bridge Club of Houston</a></li>
                  <li><a href="http://www.houstonbridgestudio.com/Mentor_Novice.htm" target="_blank">Houston Bridge Studio</a></li>
                </ul>
              </li>
            </ul>
          </li>
          <li><a href="#" class="MenuBarItemSubmenu">Club Web Pages</a>
            <ul>
              <li><a href="#" class="MenuBarItemSubmenu">Houston</a>
                <ul>
                  <li><a href="Club_Web_Pages/Ace_of_Clubs.htm" target="_blank">Ace of Clubs</a></li>
                  <li><a href="Club_Web_Pages/Apple.html" target="_blank">Apple</a></li>
                  <li><a href="Club_Web_Pages/Apple_Too.html" target="_blank">Apple Too</a></li>
                  <li><a href="Club_Web_Pages/Forest_Club.html" target="_blank">Forest Club</a></li>
                  <li><a href="http://www.houstonbridgestudio.com/" target="_blank">Houston Bridge Studio</a></li>
                  <li><a href="Club_Web_Pages/Lakeside.html" target="_blank">Lakeside</a></li>
                  <li><a href="Club_Web_Pages/Racquet_Club.html" target="_blank">Racquet Club</a></li>
                  <li><a href="Club_Web_Pages/River_Oaks.html" target="_blank">River Oaks</a></li>
                  <li><a href="Club_Web_Pages/Southwest.html" target="_blank">Southwest</a></li>
                  <li><a href="Club_Web_Pages/Spring_Branch.html" target="_blank">Spring Branch</a></li>
                </ul>
              </li>
              <li><a href="#" class="MenuBarItemSubmenu">Northside</a>
                <ul>
                  <li><a href="Club_Web_Pages/april_sound.htm" target="_blank">April Sound</a></li>
                  <li><a href="http://www.bridgeclubofhouston.org/" target="_blank">Bridge Club of Houston</a></li>
                  <li><a href="Club_Web_Pages/conroe.htm" target="_blank">Conroe</a></li>
                  <li><a href="Club_Web_Pages/Kingwood.html" target="_blank">Kingwood</a></li>
                  <li><a href="Club_Web_Pages/lakeconroe.htm" target="_blank">Lake Conroe</a></li>
                  <li><a href="Club_Web_Pages/livingston.htm" target="_blank">Livingston</a></li>
                </ul>
              </li>
              <li><a href="#" class="MenuBarItemSubmenu">Southside</a>
                <ul>
                  <li><a href="http://www.acblunit174.org/clearlak/clearlake.htm" target="_blank">Clear Lake</a></li>
                  <li><a href="http://www.acblunit174.org/pasadena/pasadena.htm" target="_blank">Pasadena</a></li>
                </ul>
              </li>
              <li><a href="#" class="MenuBarItemSubmenu">Lake Jackson</a>
                <ul>
                  <li><a href="Club_Web_Pages/bar-x.htm" target="_blank">Bar-X</a></li>
                  <li><a href="Club_Web_Pages/diamond_duplicate.htm" target="_blank">Diamond</a></li>
                  <li><a href="Club_Web_Pages/gulf_coast.htm" target="_blank">Gulf Coast</a></li>
                </ul>
              </li>
              <li><a href="#" class="MenuBarItemSubmenu">Bryan/College Station</a>
                <ul>
                  <li><a href="Club_Web_Pages/aggieland.htm" target="_blank">Aggieland</a></li>
                  <li><a href="Club_Web_Pages/brazos.htm" target="_blank">Brazos</a></li>
                  <li><a href="Club_Web_Pages/briarcrest.htm" target="_blank">Briarcrest</a></li>
                  <li><a href="Club_Web_Pages/pebble_creek.htm" target="_blank">Pebble Creek</a></li>
                  <li><a href="Club_Web_Pages/star_duplicate.htm" target="_blank">Star</a></li>
                </ul>
              </li>
              <li><a href="#" target="_blank" class="MenuBarItemSubmenu">Sugar Land</a>
                <ul>
                  <li><a href="Club_Web_Pages/riverbender.htm" target="_blank">Riverbender</a></li>
                  <li><a href="Club_Web_Pages/sugarland_dbc.htm" target="_blank">Sugar Land</a></li>
                  <li><a href="Club_Web_Pages/Sugarland_Night.htm" target="_blank">Sugar Land Night</a></li>
                  <li><a href="Club_Web_Pages/valley_bend.htm" target="_blank">Valley Bend</a></li>
                </ul>
              </li>
            </ul>
          </li>
          <li><a href="#" class="MenuBarItemSubmenu">Scores</a>
            <ul>
              <li><a href="March.php">March</a></li>
              <li><a href="April.php">April</a></li>
              <li><a href="May.php">May</a></li>
            </ul>
          </li>
          <li><a href="#" class="MenuBarItemSubmenu">D16 &amp; ACBL Links</a>
            <ul>
              <li><a href="http://www.d16acbl.org/" target="_blank">District 16 Home Page</a></li>
              <li><a href="http://www.d16acbl.org/D16_Map.html" target="_blank">Map of District 16</a></li>
              <li><a href="http://www.d16acbl.org/D16_Results.html" target="_blank">District Tournament Results</a></li>
              <li><a href="http://www.d16acbl.org/D16_Calendar.html" target="_blank">District Calendar</a></li>
              <li><a href="http://www.d16acbl.org/D16_Scorecard.html" target="_blank">Scorecard</a></li>
              <li><a href="http://www.d16acbl.org/Honors/Jacoby/D16_Jacoby.html" target="_blank">Jacoby Awards</a></li>
              <li><a href="http://www.d16acbl.org/Honors/Texas_Star/D16_TexasStar.html" target="_blank">Texas Star Awards</a></li>
              <li><a href="http://www.acbl.org/" target="_blank">ACBL Home Page</a></li>
              <li><a href="http://web.acbl.org/CustomerLogin/login.do;jsessionid=0000zJMgbgs3BAR2ArmUm4Wn6Si:-1" target="_blank">Check your Masterpoints</a></li>
              <li><a href="http://web3.acbl.org/internet/AddressChangeApp.nsf/changeofaddress?OpenForm" target="_blank">Change info with ACBL</a></li>
              <li><a href="http://www.acbl.org/play/toolsSupplies.html" target="_blank">Make your own convention card</a></li>
              <li><a href="http://www.acbl.org/play/recent-results.php" target="_blank">Results of past NABCs</a></li>
              <li><a href="http://www.acbl.org/assets/documents/play/Laws-of-Duplicate-Bridge.pdf" target="_blank">Laws of Duplicate Bridge</a></li>
              <li><a href="#" class="MenuBarItemSubmenu">Find a club</a>
                <ul>
                  <li><a href="http://web2.acbl.org/As400/clubs/allClubs/uclub-TX.htm" target="_blank">Texas</a></li>
                  <li><a href="http://www.acbl.org/play/findClub.html" target="_blank">ACBL</a></li>
                </ul>
              </li>
            </ul>
          </li>
          <li><a href="#" class="MenuBarItemSubmenu">Non Bridge Links</a>
            <ul>
              <li><a href="http://www.aarpmagazine.org/games/" target="_blank">AARP Games</a></li>
              <li><a href="http://www.amazon.com/" target="_blank">Amazon.com</a></li>
              <li><a href="http://www.consumerworld.org/" target="_blank">Consumer World</a></li>
              <li><a href="http://www.onelook.com/" target="_blank">Dictionary</a></li>
              <li><a href="http://www.chron.com/" target="_blank">Houston Chronicle</a></li>
              <li><a href="http://www.google.com/" target="_blank">Google</a></li>
              <li><a href="http://maps.google.com/" target="_blank">Google Maps</a></li>
              <li><a href="http://www.b4-u-eat.com/" target="_blank">Houston Restaurant Guide</a></li>
              <li><a href="http://us.imdb.com/" target="_blank">Internet Movie Database</a></li>
              <li><a href="http://www.uclick.com/client/mma/uj/" target="_blank">Jigsaw Puzzle</a></li>
              <li><a href="http://patandlew.com/Movie%20Ratings.htm" target="_blank">Lew's Movie Reviews</a></li>
              <li><a href="http://medlineplus.gov/" target="_blank">Medical Information</a></li>
              <li><a href="http://www.netflix.com/" target="_blank">NetFlix</a></li>
              <li><a href="http://www.npr.org/" target="_blank">NPR</a></li>
              <li><a href="http://www.privateeye.com/?piid=06&" target="_blank">Public Info (Age, family)</a></li>
              <li><a href="http://www.yahoo.com/" target="_blank">Yahoo</a></li>
            </ul>
          </li>
        </ul>
        <!--End NavContainer div-->
      </div>
      <!-- InstanceBeginEditable name="Main_Content" -->
      <div id="container">
        <div id="mainContent">
          <h1>Register on the Unit 174 Web site</h1>
          <p>To begin the registration process, please fill in your ACBL number and click <strong>Submit</strong>.</p>
          <form action="<?php echo $editFormAction; ?>" method="post" name="registration_form" id="registration_form">
            <table>
              <tr>
                <td><label for="ACBL_Number">ACBL Number</label></td>
                <td><span id="sprytextfield1">
                  <input name="ACBL_Number" type="text" id="ACBL_Number" size="20" maxlength="20" />
                  <span class="textfieldRequiredMsg">A value is required.</span>
                  <span class="textfieldMinCharsMsg">Minimum number of characters not met.</span>
                  <span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span>
                  </span>
                </td>
                <td><input type="submit" name="submit" id="submit" value="Submit" /></td>
              </tr>
            </table>
          </form>
          <?php
             if ( isset($_POST['ACBL_Number'])) {
               if ($totalRows_rsACBLNumber > 0)  { 
              echo "<p>Great - your ACBL number was found.  Now enter a password, and confirm it. </p>";
              ?>
          <form id="Passwordform" name="Passwordform" method="post" action="">
            <table>
              <tr>
                <td><label for="password1">Password:</label></td>
                <td><span id="ValidatePasswordWidget">
                  <input name="password1" type="password" id="password1" value="" size="20" maxlength="20"/>
                  <span class="passwordRequiredMsg">A value is required.</span>
                  <span class="passwordMinCharsMsg">The minimum number of characters not met.</span>
                  <span class="passwordMaxCharsMsg">The maximum number of characters exceeded.</span>
                  <span class="passwordInvalidStrengthMsg">The password strength condition not met.</span>
                  <span class="passwordCustomMsg">User defined condition not met.</span>
                  </span>
                </td>
              </tr>
              <tr>
                <td><label for="confirmpassword">Re-enter password </label></td>
                <td><span id="ConfirmPasswordWidget">
                  <input type="password" id="confirmpassword" value="" size="20" maxlength="20" />
                  <span class="confirmRequiredMsg">A value is required.</span>
                  <span class="confirmInvalidMsg">The values do not match</span>
                  </span>
                </td>
              </tr>
              <tr>
                <td> </td>
                <td><input type="submit" name="submit" value="Submit" />
                </td>
              </tr>
            </table>
          </form>
          <?php  } else {
                 echo "<p>I'm sorry, but that ACBL number was not found in the database.</p>" ;
                 echo "<p>If you are a member of Unit 174, and haven't joined in the past month, </P>";
                     echo "<p>contact the Unit webmaster at the e-mail link shown below.</p>" ;
             ?>
        </div>
      </div>
    <script type="text/javascript">
        var sprytextfield1      = new Spry.Widget.ValidationTextField("sprytextfield1", "none", {validateOn:["blur"], minChars:7, maxChars:7});
            var password1           = new Spry.Widget.ValidationPassword("ValidatePasswordWidget", {validateOn:["blur"], minAlphaChars:3, minNumbers:1, maxSpecialChars:2, minChars:3, maxChars:8});
            var ConfirmWidgetObject = new Spry.Widget.ValidationConfirm("ConfirmPasswordWidget", "password1", {validateOn: ['blur']});
      </script>
      <!-- InstanceEndEditable -->
      <div id="footer"> <img src="images/ACBL Logo.gif" alt="ACBL Logo" width="58" height="55"class="left_image" /> <img src="images/Houston Logo-Small.png" alt="Unit 174 Logo" width="55" height="55" class="right_image"/>
        <h1>These pages &copy;ACBL Unit 174, All rights reserved.</h1>
        <p>This site maintained by the <a href="mailto:[email protected]">Unit 174 Webmaster</a>.</p>
        <p><a href="http://www.ACBLUnit174.org">www.ACBLUnit174.org</a></p>
        <!--End footer div-->
      </div>
      <!--End container div-->
    </div>
    <script type="text/javascript">
    <!--
    var MenuBar1 = new Spry.Widget.MenuBar("NavList", {imgDown:"SpryAssets/SpryMenuBarDownHover.gif", imgRight:"SpryAssets/SpryMenuBarRightHover.gif"});
    //-->
    </script>
    </body>
    <!-- InstanceEnd -->
    </html>
    <?php
    mysql_free_result($rsACBLNumber);
    ?>

    Folks -
    I have narrowed down the cause.
    This error appears if the form to which the confirm validation is applied is inside an if condition that is not met, causing the form not to appear in the html source.  It doesn't seem to affect the password validation similarly, just the confirm validation.
    Doesn't this have to be bug?  I'm not fluent in Javascript, so I'd sure appreciate someone telling my how to work around this.
    This is the structure that causes the error to be generated, but only when condition is FALSE.  If condition is TRUE, no error is generated.
    <?php if (condition) { ?>
      form with confirm validation
    <?php }; ?>
    Help anyone?

  • Validator on the generated form on the server WL

    Hello, i'm using Jdev 10g.
    i have the form
    <af:iterator value="#{informClient_bean.fields}" var="row"
                                   rows="40">
                        <af:switcher id="sw1" facetName="#{row.type}"
                                     defaultFacet="Text">
                          <f:facet name="3">
                            <af:selectInputDate label="#{row.label}"
                                                value="#{row.value}"
                                                maximumLength="#{row.maxlength}"
                                                shortDesc="#{row.shortDesc}"
                                                rendered="#{row.rendered}"
                                                validator="#{informClient_bean.validateFieldT}"
                                                required="#{row.requared}"
                                                readOnly="#{row.readOnly}"
                                                requiredMessageDetail="обязательное поле не заполнено"/>
                          </f:facet>
                          <f:facet name="1">
                            <af:inputText label="#{row.label}" value="#{row.value}"
                                          maximumLength="#{row.maxlength}"
                                          shortDesc="#{row.shortDesc}"
                                          rendered="#{row.rendered}"
                                          validator="#{informClient_bean.validateFieldT}"
                                          required="#{row.requared}"
                                          onkeydown="validMask();"
                                          readOnly="#{row.readOnly}"
                                          requiredMessageDetail="обязательное поле не заполнено"/>
                          </f:facet>
                          <f:facet name="9">
                            <af:selectOneChoice value="#{row.value}"
                                                requiredMessageDetail="обязательное поле не заполнено"
                                                autoSubmit="#{row.autoSubmit}"
                                                immediate="#{row.immediate}"
                                                label="#{row.label}"
                                                readOnly="#{row.readOnly}"
                                                onmouseup="validMask();">
                              <f:selectItems value="#{row.list}"/>
                            </af:selectOneChoice>
                          </f:facet>
                          <f:facet name="10">
                            <af:outputText value="#{row.label}"
                                           inlineStyle="font-size:large; color:rgb(51,102,153);"/>
                          </f:facet>
                          <f:facet name="11">
                            <af:selectBooleanCheckbox value="#{row.value}"
                                                      label="#{row.label}"
                                                      readOnly="#{row.readOnly}"/>
                          </f:facet>
                        </af:switcher>
                      </af:iterator>and have a bean for it form
    public class InformClient extends FormFields {
        public InformClient() {
            super();
        public void validateFieldT(FacesContext facesContext,
                                  UIComponent uiComponent, Object object) {
            try{
            ApplicationModule am = FacesUtil.getAM("PrototypeAMDataControl");
            ReqFieldValidationViewImpl voFieldParam =
                (ReqFieldValidationViewImpl)am.findViewObject("ReqFieldValidationView");
            voFieldParam.setFormName(uiComponent.getAttributes().get("requiredMessageDetail").toString()); //id поля
            voFieldParam.setFormCode("4");
            voFieldParam.executeQuery();
            ReqFieldValidationViewRowImpl fieldRow =
                (ReqFieldValidationViewRowImpl)voFieldParam.first();
            if (fieldRow != null) {
                Pattern p = Pattern.compile(fieldRow.getRffMask());
                Matcher m = p.matcher(object.toString());
                if (!m.matches()) {
                    FacesMessage fm =
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, fieldRow.getRffName(),
                                         fieldRow.getRffErrorMsg());
                    throw new ValidatorException(fm);
            catch(Exception e){
                e.printStackTrace();
    }If I'm testing on a local machine validation work out, but if build and run on the server WL validation fails. Why is this happening?

    validation method did not work out (
    it works for a local test if run at Jdev, if you start to WebLogic the validation does not work (((
    Edited by: 6AZblJlb on 29.03.2013 2:21

  • Struts Validation not working

    As far as I can tell I can't see anything wrong with my validation on struts, but if I put nothing into a required field it doesn't report an error. Any ideas? Below is the offending code:
    First Validation.xml
    <form-validation>
        <formset>
            <form name="User">
                <field property="email"
                        depends="required,email">
                    <arg0 key="user.email"/>
                </field>
            </form>
        </formset>
    </form-validation>Next my struts-config.xml:
    <form-bean name="User" type="org.apache.struts.validator.DynaValidatorForm">
             <form-property name="userName" type="java.lang.String"/>
             <form-property name="password" type="java.lang.String"/>
             <form-property name="firstName" type="java.lang.String"/>
             <form-property name="lastName" type="java.lang.String"/>
             <form-property name="email" type="java.lang.String"/>
    </form-bean>next the jsp code:
    <html:form action="/profile?action=save">
    <html:errors/><BR><BR>
    <tr>
         <td align="left" valign="top"><font face="Arial, Helvetica" size="2">Email:</font></td>
         <td></td>
         <td align="left"><html:text property="email" size="35" maxlength="255" /><br><font size="1"><i>(Your name @ your company web site address)</i></font></td>
    </tr>
    </form>And my Action code:
              else if (action.equals("save")){
                   errors = form.validate(mapping, request);
                   if ((errors == null) || (errors.isEmpty())){
                        //Save Item goes here
                        return (mapping.findForward("Profile"));
                   else {
                        saveErrors(request, errors);
                        return (mapping.findForward("show"));
              }And my validator-rules.xml (it is the default one that comes with struts, but I included it just in case)
    <form-validation>
       <global>
          <validator name="required"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateRequired"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                      msg="errors.required">
             <javascript><![CDATA[
                function validateRequired(form) {
                    var isValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oRequired = new required();
                    for (x in oRequired) {
                         var field = form[oRequired[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'file' ||
                            field.type == 'select-one' ||
                            field.type == 'radio' ||
                            field.type == 'password') {
                            var value = '';
                                  // get field's value
                                  if (field.type == "select-one") {
                                       var si = field.selectedIndex;
                                       if (si >= 0) {
                                            value = field.options[si].value;
                                  } else {
                                       value = field.value;
                            if (trim(value).length == 0) {
                                 if (i == 0) {
                                     focusField = field;
                                 fields[i++] = oRequired[x][1];
                                 isValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return isValid;
                // Trim whitespace from left and right sides of s.
                function trim(s) {
                    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
                ]]>
             </javascript>
          </validator>
          <validator name="requiredif"
                     classname="org.apache.struts.validator.FieldChecks"
                     method="validateRequiredIf"
                     methodParams="java.lang.Object,
                                   org.apache.commons.validator.ValidatorAction,
                                   org.apache.commons.validator.Field,
                                   org.apache.struts.action.ActionErrors,
                                   org.apache.commons.validator.Validator,
                                   javax.servlet.http.HttpServletRequest"
                     msg="errors.required">
          </validator>
          <validator name="minlength"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateMinLength"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.minlength">
             <javascript><![CDATA[
                function validateMinLength(form) {
                    var isValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oMinLength = new minlength();
                    for (x in oMinLength) {
                        var field = form[oMinLength[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea') {
                            var iMin = parseInt(oMinLength[x][2]("minlength"));
                            if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
                                if (i == 0) {
                                    focusField = field;
                                fields[i++] = oMinLength[x][1];
                                isValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return isValid;
                }]]>
             </javascript>
          </validator>
          <validator name="maxlength"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateMaxLength"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.maxlength">
             <javascript><![CDATA[
                function validateMaxLength(form) {
                    var isValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oMaxLength = new maxlength();
                    for (x in oMaxLength) {
                        var field = form[oMaxLength[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea') {
                            var iMax = parseInt(oMaxLength[x][2]("maxlength"));
                            if (field.value.length > iMax) {
                                if (i == 0) {
                                    focusField = field;
                                fields[i++] = oMaxLength[x][1];
                                isValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return isValid;
                }]]>
             </javascript>
          </validator>
          <validator name="mask"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateMask"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.invalid">
             <javascript><![CDATA[
                function validateMask(form) {
                    var isValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oMasked = new mask();
                    for (x in oMasked) {
                        var field = form[oMasked[x][0]];
                        if ((field.type == 'text' ||
                             field.type == 'textarea') &&
                             (field.value.length > 0)) {
                            if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
                                if (i == 0) {
                                    focusField = field;
                                fields[i++] = oMasked[x][1];
                                isValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return isValid;
                function matchPattern(value, mask) {
                   return mask.exec(value);
                }]]>
             </javascript>
          </validator>
          <validator name="byte"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateByte"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.byte"
           jsFunctionName="ByteValidations">
             <javascript><![CDATA[
                function validateByte(form) {
                    var bValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oByte = new ByteValidations();
                    for (x in oByte) {
                         var field = form[oByte[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'select-one' ||
                                  field.type == 'radio') {
                                  var value = '';
                                  // get field's value
                                  if (field.type == "select-one") {
                                       var si = field.selectedIndex;
                                       if (si >= 0) {
                                            value = field.options[si].value;
                                  } else {
                                       value = field.value;
                            if (value.length > 0) {
                                if (!isAllDigits(value)) {
                                    bValid = false;
                                    if (i == 0) {
                                        focusField = field;
                                    fields[i++] = oByte[x][1];
                                } else {
                                     var iValue = parseInt(value);
                                     if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
                                         if (i == 0) {
                                             focusField = field;
                                         fields[i++] = oByte[x][1];
                                         bValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return bValid;
                }]]>
             </javascript>
          </validator>
          <validator name="short"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateShort"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.short"
           jsFunctionName="ShortValidations">
             <javascript><![CDATA[
                function validateShort(form) {
                    var bValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oShort = new ShortValidations();
                    for (x in oShort) {
                         var field = form[oShort[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'select-one' ||
                            field.type == 'radio') {
                            var value = '';
                                  // get field's value
                                  if (field.type == "select-one") {
                                       var si = field.selectedIndex;
                                       if (si >= 0) {
                                            value = field.options[si].value;
                                  } else {
                                       value = field.value;
                            if (value.length > 0) {
                                if (!isAllDigits(value)) {
                                    bValid = false;
                                    if (i == 0) {
                                        focusField = field;
                                    fields[i++] = oShort[x][1];
                                } else {
                                     var iValue = parseInt(value);
                                     if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
                                         if (i == 0) {
                                             focusField = field;
                                         fields[i++] = oShort[x][1];
                                         bValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return bValid;
                }]]>
             </javascript>
          </validator>
          <validator name="integer"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateInteger"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.integer"
           jsFunctionName="IntegerValidations">
             <javascript><![CDATA[
                function validateInteger(form) {
                    var bValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oInteger = new IntegerValidations();
                    for (x in oInteger) {
                         var field = form[oInteger[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'select-one' ||
                            field.type == 'radio') {
                            var value = '';
                                  // get field's value
                                  if (field.type == "select-one") {
                                       var si = field.selectedIndex;
                                      if (si >= 0) {
                                           value = field.options[si].value;
                                  } else {
                                       value = field.value;
                            if (value.length > 0) {
                                if (!isAllDigits(value)) {
                                    bValid = false;
                                    if (i == 0) {
                                         focusField = field;
                                          fields[i++] = oInteger[x][1];
                                } else {
                                     var iValue = parseInt(value);
                                     if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
                                         if (i == 0) {
                                             focusField = field;
                                         fields[i++] = oInteger[x][1];
                                         bValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return bValid;
                function isAllDigits(argvalue) {
                    argvalue = argvalue.toString();
                    var validChars = "0123456789";
                    var startFrom = 0;
                    if (argvalue.substring(0, 2) == "0x") {
                       validChars = "0123456789abcdefABCDEF";
                       startFrom = 2;
                    } else if (argvalue.charAt(0) == "0") {
                       validChars = "01234567";
                       startFrom = 1;
                    } else if (argvalue.charAt(0) == "-") {
                        startFrom = 1;
                    for (var n = startFrom; n < argvalue.length; n++) {
                        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
                    return true;
                }]]>
             </javascript>
          </validator>
          <validator name="long"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateLong"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.long"/>
          <validator name="float"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateFloat"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.float"
           jsFunctionName="FloatValidations">
             <javascript><![CDATA[
                function validateFloat(form) {
                    var bValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oFloat = new FloatValidations();
                    for (x in oFloat) {
                         var field = form[oFloat[x][0]];
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'select-one' ||
                            field.type == 'radio') {
                             var value = '';
                                  // get field's value
                                  if (field.type == "select-one") {
                                       var si = field.selectedIndex;
                                       if (si >= 0) {
                                           value = field.options[si].value;
                                  } else {
                                       value = field.value;
                            if (value.length > 0) {
                                // remove '.' before checking digits
                                var tempArray = value.split('.');
                                var joinedString= tempArray.join('');
                                if (!isAllDigits(joinedString)) {
                                    bValid = false;
                                    if (i == 0) {
                                        focusField = field;
                                    fields[i++] = oFloat[x][1];
                                } else {
                                     var iValue = parseFloat(value);
                                     if (isNaN(iValue)) {
                                         if (i == 0) {
                                             focusField = field;
                                         fields[i++] = oFloat[x][1];
                                         bValid = false;
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    return bValid;
                }]]>
             </javascript>
          </validator>
          <validator name="double"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateDouble"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.double"/>
          <validator name="date"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateDate"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.date"
           jsFunctionName="DateValidations">
             <javascript><![CDATA[
                function validateDate(form) {
                   var bValid = true;
                   var focusField = null;
                   var i = 0;
                   var fields = new Array();
                   oDate = new DateValidations();
                   for (x in oDate) {
                       var value = form[oDate[x][0]].value;
                       var datePattern = oDate[x][2]("datePatternStrict");
                       if ((form[oDate[x][0]].type == 'text' ||
                            form[oDate[x][0]].type == 'textarea') &&
                           (value.length > 0) &&
                           (datePattern.length > 0)) {
                         var MONTH = "MM";
                         var DAY = "dd";
                         var YEAR = "yyyy";
                         var orderMonth = datePattern.indexOf(MONTH);
                         var orderDay = datePattern.indexOf(DAY);
                         var orderYear = datePattern.indexOf(YEAR);
                         if ((orderDay < orderYear && orderDay > orderMonth)) {
                             var iDelim1 = orderMonth + MONTH.length;
                             var iDelim2 = orderDay + DAY.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderDay && iDelim2 == orderYear) {
                                dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                             } else if (iDelim1 == orderDay) {
                                dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                             } else if (iDelim2 == orderYear) {
                                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                             } else {
                                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                if (!isValidDate(matched[2], matched[1], matched[3])) {
                                   if (i == 0) {
                                       focusField = form[oDate[x][0]];
                                   fields[i++] = oDate[x][1];
                                   bValid =  false;
                             } else {
                                if (i == 0) {
                                    focusField = form[oDate[x][0]];
                                fields[i++] = oDate[x][1];
                                bValid =  false;
                         } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                             var iDelim1 = orderDay + DAY.length;
                             var iDelim2 = orderMonth + MONTH.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                             } else if (iDelim1 == orderMonth) {
                                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                             } else if (iDelim2 == orderYear) {
                                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                             } else {
                                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                 if (!isValidDate(matched[1], matched[2], matched[3])) {
                                     if (i == 0) {
                                         focusField = form[oDate[x][0]];
                                     fields[i++] = oDate[x][1];
                                     bValid =  false;
                             } else {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                         } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                             var iDelim1 = orderYear + YEAR.length;
                             var iDelim2 = orderMonth + MONTH.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                             } else if (iDelim1 == orderMonth) {
                                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                             } else if (iDelim2 == orderDay) {
                                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                             } else {
                                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                 if (!isValidDate(matched[3], matched[2], matched[1])) {
                                     if (i == 0) {
                                         focusField = form[oDate[x][0]];
                                      fields[i++] = oDate[x][1];
                                      bValid =  false;
                              } else {
                                  if (i == 0) {
                                      focusField = form[oDate[x][0]];
                                  fields[i++] = oDate[x][1];
                                  bValid =  false;
                         } else {
                             if (i == 0) {
                                 focusField = form[oDate[x][0]];
                             fields[i++] = oDate[x][1];
                             bValid =  false;
                   if (fields.length > 0) {
                      focusField.focus();
                      alert(fields.join('\n'));
                   return bValid;
             function isValidDate(day, month, year) {
                 if (month < 1 || month > 12) {
                        return false;
                    if (day < 1 || day > 31) {
                        return false;
                    if ((month == 4 || month == 6 || month == 9 || month == 11) &&
                        (day == 31)) {
                        return false;
                    if (month == 2) {
                        var leap = (year % 4 == 0 &&
                                   (year % 100 != 0 || year % 400 == 0));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

    Next my struts-config.xml:That's all? What about an <action-mappings> section
    which specifies the action URIs and whether or not
    validation is turned on for specific ones?Whoops, sorry I forgot to put my action, although you just made me figure out the answer. I forgot I have 2 versions of the bean, one called Profile and one Called User, and I was trying to test the validation on the Profile bean while I was specifying the User bean :)

  • Validator Cleaned existing formbean or generated new one

    Hi buddies,
    I'd like to use struts validator in my project. It seems working but cleaning existing formbean or generating new formbean.
    The case is: after listing all customers, user can choose edit or delete one of them. Supposed (and it works correctly before I applied validator in) the Action will find the client and populate the appropriate field value into form bean, and the form bean is to be forward to edit jsp page. But now, in the fields on the edit jsp page are blank, just like create new record.
    it took me 2 days, and cannot fix the problem. Please gave me some ideas. Your any input is appreciated.
    [u]struts-config.xml[/u]
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
    <struts-config>
         <data-sources />
         <form-beans>
              <form-bean name="customerListForm"
                   type="com.articy.struts.form.CustomerListForm" />
              <form-bean name="customerEditForm"
                   type="com.articy.struts.form.CustomerEditForm" />
              <form-bean name="loginForm"
                   type="com.articy.struts.form.LoginForm" />
         </form-beans>
         <global-exceptions />
         <global-forwards>
              <forward name="welcome" path="/default.do" redirect="true" />
              <forward name="Logon" path="/security/login.jsp"
                   redirect="true" />
         </global-forwards>
         <action-mappings>
              <action forward="/jsp/index.jsp" path="/default" unknown="true" />
              <action attribute="customerListForm"
                   input="/jsp/customerList.jsp" name="customerListForm"
                   path="/customerList" scope="request"
                   type="com.articy.struts.action.CustomerListAction">
                   <forward name="listCustomer" path="/jsp/customerList.jsp" />
              </action>
              <action attribute="customerEditForm"
                   input="/jsp/customerEdit.jsp" name="customerEditForm" parameter="do"
                   path="/customerEdit" scope="request"
                   type="com.articy.struts.action.CustomerEditAction">
                   <forward name="addCustomer" path="/jsp/customerAdd.jsp" />
                   <forward name="listCustomers" path="/customerList.do"
                        redirect="true" />
                   <forward name="editCustomer" path="/jsp/customerEdit.jsp" />
              </action>
              <action attribute="loginForm" input="/security/login.jsp"
                   name="loginForm" path="/login" scope="request"
                   type="com.articy.struts.action.LoginAction">
                   <forward name="loginSuccess"
                        path="/security/loginSucess.jsp" />
                   <forward name="loginFailure"
                        path="/security/loginFailure.jsp" redirect="true" />
              </action>
              <action path="/logout"
                   type="com.articy.struts.action.LogoutAction">
                   <forward name="Success" path="/security/logoutSuccess.jsp"
                        redirect="true" />
              </action>
              <action attribute="loginForm" name="loginForm"
                   path="/prepareLogin" scope="request"
                   type="com.articy.struts.action.PrepareLoginAction">
                   <forward name="logon" path="/security/login.jsp" />
              </action>
         </action-mappings>
         <controller
              processorClass="org.apache.struts.tiles.TilesRequestProcessor" />
         <message-resources
              parameter="com.articy.struts.ApplicationResources" />
         <plug-in className="org.apache.struts.tiles.TilesPlugin">
              <set-property property="definitions-config"
                   value="/WEB-INF/tiles-defs.xml" />
              <set-property property="definitions-parser-validate"
                   value="true" />
              <set-property property="moduleAware" value="true" />
         </plug-in>
         <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
              <set-property property="pathnames"
                   value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
              <set-property property="stopOnFirstError" value="true" />
         </plug-in>
    </struts-config>
    validation.xml
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration
    1.1.3//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
    <form-validation>
      <global>
        <constant>
          <constant-name>phone</constant-name>
          <constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value>
        </constant>
        <constant>
          <constant-name>zip</constant-name>
          <constant-value>^\d{5}\d*$</constant-value>
        </constant>
      </global>
      <!-- ========================= Default Formset ========================= -->
      <formset>
        <constant>
          <constant-name>zip</constant-name>
          <constant-value>^\d{5}(-\d{4})?$</constant-value>
        </constant>
        <form name="customerForm">
          <field property="lastname" depends="required,mask,minlength">
            <arg0 key="customereditform.lastname.displayname" position="0"/>
            <arg1 name="minlength" key="${var:minlength}" resource="false"
    position="1"/>
            <var>
              <var-name>mask</var-name>
              <var-value>^\w+$</var-value>
            </var>
            <var>
              <var-name>minlength</var-name>
              <var-value>5</var-value>
            </var>
          </field>
          <field property="name" depends="required,mask,maxlength">
            <msg name="mask" key="customereditform.name.maskmsg" />
            <arg0 key="customereditform.name.displayname" position="0" />
            <arg1 name="maxlength" key="${var:maxlength}" resource="false"
    position="1"/>
             <var>
              <var-name>mask</var-name>
              <var-value>^[a-zA-Z]*$</var-value>
            </var>
            <var>
              <var-name>maxlength</var-name>
              <var-value>30</var-value>
            </var>
          </field>
        </form>
      </formset>
    </form-validation>
    customerEditAction.java
    package com.articy.struts.action;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;
    import www.articy.wdb.bl.LibraryManager;
    import com.articy.struts.form.CustomerEditForm;
    public class CustomerEditAction extends DispatchAction {
         public ActionForward editCustomer(ActionMapping mapping, ActionForm form,
                   HttpServletRequest request, HttpServletResponse response) {
              System.out.println("editCustomer");
              CustomerEditForm customerEditForm = (CustomerEditForm) form;
               * Arthur Niu get id of the customer from request
              Integer id = Integer.valueOf(request.getParameter("id"));
              // get business logic
              LibraryManager vvmManager = new LibraryManager();
              customerEditForm.setCustomer(vvmManager.getCustomerByPrimaryKey(id));
              return mapping.findForward("editCustomer");
         public ActionForward deleteCustomer(ActionMapping mapping, ActionForm form,
                   HttpServletRequest request, HttpServletResponse response) {
              System.out.println("deleteCustomer");
              CustomerEditForm customerEditForm = (CustomerEditForm) form;
               * Arthur Niu get id of the customer from request
              Integer id = Integer.valueOf(request.getParameter("id"));
              // get business logic
              LibraryManager vvmManager = new LibraryManager();
              vvmManager.removeCustomerByPrimaryKey(id);
              return mapping.findForward("listCustomers");
         public ActionForward addCustomer(ActionMapping mapping, ActionForm form,
                   HttpServletRequest request, HttpServletResponse response) {
              System.out.println("addCustomer");
              CustomerEditForm customerEditForm = (CustomerEditForm) form;
              return mapping.findForward("addCustomer");
         public ActionForward saveCustomer(ActionMapping mapping, ActionForm form,
                   HttpServletRequest request, HttpServletResponse response) {
              CustomerEditForm customerEditForm = (CustomerEditForm) form;
              if (isCancelled(request)) {
                   removeFormBean(mapping, request);
                   return (mapping.findForward("listCustomers"));
              // get business logic
              LibraryManager vvmManager = new LibraryManager();
              vvmManager.saveCustomer(customerEditForm.getCustomer());
              return mapping.findForward("listCustomers");
         protected void removeFormBean(ActionMapping mapping,
                   HttpServletRequest request) {
              // Remove the obsolete form bean
              if (mapping.getAttribute() != null) {
                   if ("request".equals(mapping.getScope())) {
                        request.removeAttribute(mapping.getAttribute());
                   } else {
                        HttpSession session = request.getSession();
                        session.removeAttribute(mapping.getAttribute());
    customerEditForm.java
    package com.articy.struts.form;
    import java.io.Serializable;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.validator.ValidatorForm;
    import www.articy.wdb.Customer;
    public class CustomerEditForm extends ValidatorForm implements Serializable {
         private static final long serialVersionUID = 1L;
         private Customer customer;
         public Customer getCustomer() {
              return customer;
         public void setCustomer(Customer customer) {
              this.customer = customer;
         public boolean equals(Object rhs) {
              return customer.equals(rhs);
         public Integer getId() {
              return customer.getId();
         public void setId(Integer id) {
              customer.setId(id);
         public String getName() {
              return customer.getName();
         public void setName(String name) {
              customer.setName(name);
         public String getLastname() {
              return customer.getLastname();
         public void setLastname(String lastname) {
              customer.setLastname(lastname);
         public Integer getAge() {
              return customer.getAge();
         public void setAge(Integer age) {
              customer.setAge(age);
         public Boolean getActive() {
              return customer.getActive();
         public void setActive(Boolean active) {
              customer.setActive(active);
         public java.sql.Date getBod() {
              return customer.getBod();
         public void setBod(java.sql.Date bod) {
              customer.setBod(bod);
         public java.sql.Timestamp getLogontime() {
              return customer.getLogontime();
              public void setLogontime(java.sql.Timestamp logontime) {
              customer.setLogontime(logontime);
         public String toString() {
              return customer.toString();
         public void reset(ActionMapping mapping, HttpServletRequest request) {
              customer = new Customer();
    customerList.jsp
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
    <html>
    <head>
    <title>JSP for customerListForm form</title> </head> <body> <table border="1"> <tbody>
    <%-- set the header --%>
    <logic:present name="customerListForm" property="customers">
    <tr>
    <td>Id</td>
    <td>Name</td>
    <td>Lastname</td>
    <td>Age</td>
    <td>Active</td>
    <td>Bod</td>
    </tr>
    <%-- start with an iterate over the collection customer --%> <logic:iterate name="customerListForm" property="customers" id="customer"> <tr>
    <%-- customer information --%>
    <td><bean:write name="customer" property="id" /></td>
    <td><bean:write name="customer" property="name" /></td>
    <td><bean:write name="customer" property="lastname" /></td>
    <td><bean:write name="customer" property="age" /></td>
    <td><bean:write name="customer" property="active" /></td>
    <td><bean:write name="customer" property="bod" /></td>
    <%-- edit and delete link for each customer --%> <td><html:link action="customerEdit.do?do=editCustomer"
    paramName="customer"
    paramProperty="id"
    paramId="id">Edit</html:link>
    </td>
    <td><html:link action="customerEdit.do?do=deleteCustomer"
    paramName="customer"
    paramProperty="id"
    paramId="id">Delete</html:link>
    </td>
    </tr>
    </logic:iterate>
    <%-- end interate --%>
    </logic:present>
    <%-- if customers cannot be found display a text --%> <logic:notPresent name="customerListForm" property="customers"> <tr> <td colspan="5">No customer found.</td> </tr> </logic:notPresent>
    </tbody>
    </table>
    <br>
    <%-- add and back to menu button --%>
    <html:button property="add"
    onclick="location.href='customerEdit.do?do=addCustomer'">Add a new customer </html:button>   <html:button property="back"
    onclick="location.href='default.do'">Back to menu </html:button> </body> </html>
    customerEdit.jsp
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
    <html>
    <head>
    <title>JSP for customerEditForm form</title> </head> <body>
    <logic:messagesPresent>
       <bean:message key="errors.header"/>
       <ul>
       <html:messages id="error">
          <li><bean:write name="error"/></li>
       </html:messages>
       </ul><hr />
    </logic:messagesPresent>
    <html:form action="customerEdit"  method="post">
    <html:hidden property="id"/> <html:hidden property="do" value="saveCustomer"/>
    Id: <html:text property="id"/><br/>
    Name: <html:text property="name"/><br/>
    Lastname: <html:text property="lastname"/><br/>
    Age: <html:text property="age"/><br/>
    Active: <html:text property="active"/><br/>
    Bod: <html:text property="bod"/><br/>
          <html:submit property="submit" onclick="bCancel=false;">
             <bean:message key="button.save"/>
          </html:submit>
    <html:cancel/>
    </html:form>
    </body>
    </html>

    anybody can help?

  • Struts and validation question ?

    hi,
    i am using the struts framework for my application, i have a simple jsp logon page (username, password)
    i have defined a validtion.xml file
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
    <!--
        Validation Rules for the Struts Example Web Application
        $Id: validation.xml,v 1.8 2003/05/25 22:51:20 dgraham Exp $
    -->
    <form-validation>
        <!-- ========== Default Language Form Definitions ===================== -->
        <formset>
            <form name="logonForm">
                <field property="username"
                        depends="required, minlength,maxlength">
                    <arg0   key="prompt.username"/>
                    <arg1   key="${var:minlength}" name="minlength"
                       resource="false"/>
                    <arg2   key="${var:maxlength}" name="maxlength"
                       resource="false"/>
                    <var>
                        <var-name>maxlength</var-name>
                        <var-value>16</var-value>
                    </var>
                    <var>
                        <var-name>minlength</var-name>
                        <var-value>3</var-value>
                    </var>
                </field>
                <field property="password"
                        depends="required, minlength,maxlength">
                    <arg0   key="prompt.password"/>
                    <arg1   key="${var:minlength}" name="minlength"
                       resource="false"/>
                    <arg2   key="${var:maxlength}" name="maxlength"
                       resource="false"/>
                    <var>
                        <var-name>maxlength</var-name>
                        <var-value>16</var-value>
                    </var>
                    <var>
                        <var-name>minlength</var-name>
                        <var-value>3</var-value>
                    </var>
                </field>
            </form>
            <form name="registrationForm">
                <field property="fromAddress"
                        depends="required,email">
                    <arg0   key="prompt.fromAddress"/>
                </field>
                <field property="fullName"
                        depends="required">
                  <arg0     key="prompt.fullName"/>
                </field>
                <field property="replyToAddress"
                        depends="email">
                    <arg0   key="prompt.replyToAddress"/>
                </field>
                <field property="username"
                        depends="required">
                  <arg0     key="prompt.username"/>
                </field>
            </form>
        </formset>
    </form-validation>i have also the validation-rules.xml file provided by the struts lib.
    i would like to force the content of 'username' property to be alphabetic.
    i guess i have to create my own element
    <validator name="alphabeticString"...> inside the validation-rules.xml file, but i am newbie in javascript programming.
    i have tree question.
    1) why the validation code inside the validator element is written in javascript since it's not going to be executed at client side???
    2)can i use java instead ? (to code teh validation ...)
    3)has anyone got a code to solve this problem ?
    thanks for your help

    i would like to force the content of 'username' property to be alphabetic.
    i guess i have to create my own element
    <validator name="alphabeticString"...> inside the validation-rules.xml file,
    but i am newbie in javascript programming.Not for something that simple... there's a validator rule called mask, which takes a regular expression as an argument, so if you want only a-z: "[a-zA-Z]*" should work.
    1) why the validation code inside the validator element is written in javascript since it's not going to be executed at client side???It is validated on the client, or can be. You have to include the javascript with the html:javascript tag library tag and specify the form name. Then you need to put the onsubmit="return validateFormName();" attribute in the form tag. If JS isn't supported, it'll still default back to the server side validation.
    2)can i use java instead ? (to code teh validation ...)Don't include the JS stuff.

  • Validating XML against an XML Schema using PL/SQL

    Hello everyone,
    I've a strange problem.
    I'm trying to validate an XMLTYPE variable against an XSD schema using the XMLisValid function.
    The XML I was trying to validate was returning false (0) when using this method.
    However, when I register the XSD against a column in a table and then insert this XMLTYPE into that column, I do not get any errors. If I change the XSD to ensure failure when using this method, I do get an error, so it is registered and working.
    I have then created a very basic XSD and both methods work when validating the XML against this. So obviously the more complicated XSD I want to validate against is making a difference, but I would expect them to either both fail or both pass, not one fail and one pass.
    Does anyone know why they'd be returning different results?
    Thanks in advance for your help.
    Robin
    examples of what I'm using:
    XML to validate:
    <centres>
    <add>
    <centre>
    <centreName>Name 1</centreName>
    <centreRef>45678</centreRef>
    </centre>
    </add>
    </centres>
    Simple XSD:
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="centres" type="centresType"/>
    <xs:complexType name="addType">
    <xs:sequence>
    <xs:element type="xs:string" name="centreName"/>
    <xs:element type="xs:short" name="centreRef"/>
    </xs:sequence>
    </xs:complexType>
    <xs:complexType name="centresType">
    <xs:sequence>
    <xs:element type="addType" name="add" maxOccurs="3" minOccurs="0"/>
    </xs:sequence>
    </xs:complexType>
    </xs:schema>
    Complicated XSD:
    <?xml version="1.0" encoding="utf-8" ?>
    <!--Created with Liquid XML Studio - 30 Day Trial Edition 7.1.6.1440 (http://www.liquid-technologies.com)-->
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="centres">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="remove">
    <xs:complexType>
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1000" name="centreRef">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="50" />
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="add">
    <xs:complexType>
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1000" name="centre">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="centreName">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="100" />
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="centreRef">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="50" />
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element minOccurs="0" maxOccurs="1" name="qualifications">
    <xs:complexType>
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1000" name="qualRef">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="100" />
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="modifyQualAssociations">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="remove">
    <xs:complexType>
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1000" name="r">
    <xs:complexType>
    <xs:attribute name="centreRef" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="50" />
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="qualRef" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="100" />
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="add">
    <xs:complexType>
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1000" name="a">
    <xs:complexType>
    <xs:attribute name="centreRef" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="50" />
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="qualRef" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="100" />
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:schema>

    Steps to validate XML data against a schema in Oracle:
    1. Register your XSD in the database.
    begin
    dbms_xmlschema.registerschema(
    SchemaUrl,
    SchemaDoc,
    local => TRUE/FALSE);
    end;
    2. For validating your XML document against your registered schema, here is a sample pl/sql block.
    declare
    v_xml xmltype;
    begin
    v_xml := your_xml_document;
    v_xml.schemaValidate();
    end;
    Hope this helps :)

  • Validation of context attributes with adaptive webservice model

    Hi, I am creating a Web Dynpro Java application (on top of Netweaver AS 7.0) using an adaptive webservice model to invoke a webservice.
    The webservice has some request attributes of type string with limited length (for example limited to 1 character). I bound the model to component controller context and created a mapping between the component controller context and view context. In the view, I created a form which is bound to the context attributes.
    When user enters string values, which are longer than the maximum length specified in webservice WSDL, and submits the form, an exception is thrown when Web Dynpro runtime is trying to assign entered values into context attributes:
    com.sap.dictionary.runtime.DdCheckException: Length of character string "abcdef" must be smaller than or same as MaxLength 1;
        at com.sap.dictionary.runtime.DdTypeString.checkValid(DdTypeString.java:195)
        at com.sap.tc.webdynpro.model.webservice.base.model.BaseGenericModelClass.setAttributeValue(BaseGenericModelClass.java:304)
        at com.sap.tc.webdynpro.model.webservice.gci.WSTypedModelClass.setAttributeValue(WSTypedModelClass.java:62)
        at at.gov.bmf.demo.comp.employee.model.OrganizationalAssignment.setEmployeeGroup(OrganizationalAssignment.java:52)
        at at.gov.bmf.demo.comp.employee.wdp.IPublicEmployeeDemo$IOrganizationalAssignmentElement.wdSetObject(IPublicEmployeeDemo.java:1552)
        ... 32 more
    This exception is thrown before my non-validating action is executed, so I am not able to prevent it or handle it.
    Is there any way how to catch this exception or prevent it?
    Does anyone know where these model restrictions are stored? I searched the XML files generated for the model, but I haven't found anything. Does the Web Dynpro runtime access WSDL everytime it needs to validate request parameters?
    Thanks,
    Tomas

    No ,This is the preferred and safer way to separate the Model Node and and Input Node and relationship between them by using mapping.
    You create your context structure for input and then on action set user input to model data.
    Safer it means  : Sometimes it happen that model data not populated properly due to network or wrong user input etc ,this time our presentation will be safe and display the proper error message rather the screen went away with null pointer exception.
    Regarding your - it require a lot of work. It too much convince for us that rather than writing 50 lines of code
    for only input length validation WebDynpro provides us a better model driven solution.
    Best Regards
    Satish Kumar

Maybe you are looking for

  • ICal Print List Hang / Font Issue / Sync Problems...

    Okay, here's a couple issues all wrapped up into one thread/post - reason is cause I suspect they may all be tied together somehow, but am not sure. Sync Problems... Regarding the Syncing problems, you can find an ongoing thread about @ http://forums

  • User defined table types sometimes show up a unknown data type in Profiler

    A couple of our users have a problem when using user defined table types. Calls are made using UDTT as variables and these are then passed to a stored procedure as parameters. Sometimes the application returns a timeout. In such situations a Profiler

  • A network error when i tested the connection of a proxy user

    Good evening I 'd created a 3 appliances Filer system . Filer 1.1.0.653 The Filr Apl is in DMZ and every ports are open between it and the 2 Windows boxes (AD and File Sharing) Every thing seems well. I could inport AD users, create filr users, and w

  • Temporary Tablespace Issue

    Hello, Oracle 10g when checking temporary tablespace through sql query it gives the below output. whereas when i check through enterprise manager it shows autoextentible upto 2GB. SQL>  select *from DBA_TABLESPACES   2   where   3   tablespace_name=

  • Dreamweaver CC upgrade

    Hi I have recently installed dreamweaver CC as a pay monthly subscription upgrading from a dreamweaver CS5.5 subsciption however when the new version loads it seems to have located some old versions of websites but not the newer ones which are in a x