Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Struts errato javascript per validator... forse un baco??

    Ciao a tutti.
    Ho implementato da struts l'uso del validator tramite javascript per validare una data in formato HH:mm

    nel file validation.xml ho creato la seguente validazione

    <formset>
    <form name="nomeForm">
    <field property="oraInizio"
    depends="required,date">
    <arg key="oraInizio"/>
    <var>
    <var-name>datePattern</var-name>
    <var-value>HH:mm</var-value>
    </var>
    </field>
    <field property="oraFine"
    depends="required,date">
    <arg key="oraFine"/>
    <var>
    <var-name>datePattern</var-name>
    <var-value>HH:mm</var-value>
    </var>
    </field>
    </form>
    </formset>

    poi all'interno della mia pagina jsp:

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

    <html:javascript formName="nomeForm"/>


    <html:form action="ee" onsubmit="return validatenomeForm(this)">

    <table border="1" width="100%">

    <tr>
    <th class="right">
    <bean:message key="oraInizio"/>
    </th>
    <td class="left">
    <html:text name="nomebean" property="oraInizio" size="5" />
    </td>
    </tr>

    <tr>
    <th class="right">
    <bean:message key="oraFine"/>
    </th>
    <td class="left">
    <html:text name="nomebean" property="oraFine" size="5" />
    </td>
    </tr>

    <tr>
    <td class="right">
    <html:submit>
    <bean:message key="button.submit"/>
    </html:submit>
    </td>
    <td class="right">
    <html:reset>
    <bean:message key="button.reset"/>
    </html:reset>
    </td>
    </tr>
    </table>
    </html:form>

    <logic:messagesPresent>
    <UL>
    <html:messages id="error">
    <LI><bean:write name="error"/></LI>
    </html:messages> [/list]
    </logic:messagesPresent>

    inserendo un valore del tipo 08:30 sul campo ora inizio, javascript risponde che oraInizio non e' un formato corretto...

    Perche?
    Riporto anche il javascript che struts crea in automatico:

    function validateDate(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");

    oDate = eval('new ' + formName.value + '_DateValidations()');

    for (x in oDate) {
    var field = form[oDate[x][0]];
    var value = field.value;
    var datePattern = oDate[x][2]("datePatternStrict");
    // try loose pattern
    if (datePattern == null)
    datePattern = oDate[x][2]("datePattern");
    if ((field.type == 'hidden' ||
    field.type == 'text' ||
    field.type == 'textarea') &&
    (value.length > 0) && (datePattern.length > 0) &&
    field.disabled == false) {
    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 = field;
    }
    fields[i++] = oDate[x][1];
    bValid = false;
    }
    } else {
    if (i == 0) {
    focusField = field;
    }
    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 = field;
    }
    fields[i++] = oDate[x][1];
    bValid = false;
    }
    } else {
    if (i == 0) {
    focusField = field;
    }
    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 = field;
    }
    fields[i++] = oDate[x][1];
    bValid = false;
    }
    } else {
    if (i == 0) {
    focusField = field;
    }
    fields[i++] = oDate[x][1];
    bValid = false;
    }
    } else {
    if (i == 0) {
    focusField = field;
    }
    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));
    if (day>29 || (day == 29 && !leap)) {
    return false;
    }
    }
    return true;
    }

    Premetto che disabilitando javascript, la validazione lato server funziona correttamente.

  2. #2

  3. #3
    nessuno puo' aiutarmi??

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    69
    Non ti converrebbe spostare tutta la parte di validazione sul server?
    Utilizzando il plug-in validator ti converrebbe! In questo modo eviti di impazzire con javascript e sei sicuro che la validazione funzioni con qualsiasi browser e in qualsiasi condizione.

  6. #6
    Faro' cosi! Forse e' meglio ... Grazie cmq

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.