Incompatibile con nuovi SO

di il
7 risposte

Incompatibile con nuovi SO

Ciao, ho un problema, soprattutto per la mia scarsa conoscenza di java, che mi lascia perplesso...

Ho un programma server-side che mi da problemi di compatibilità con windows 7 (solo se è aggiornato) e successivi, dove non riesco ad utilizzare alcune funzionalità; con i sistemi precedenti a 7 invece nessun problema.

Ho un calendario semplice
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%>
<%

var Giorni=""

var GS=new Array();
GS[1]="L";
GS[2]="M";
GS[3]="M";
GS[4]="G";
GS[5]="V";
GS[6]="S";
GS[7]="D";

var TopInit=80;
var LeftInit=20;
var AltezzaLayer=22;
var LarghezzaLayer=30;
var LarghezzaLayerMese=100;
var TopMesiInit=20;

var Oggi;

var re = new RegExp('^((0?[1-9])|([12][0-9])|(3[01]))[/]((0?[1-9])|(1[012]))[/]((19)|(20))([0-9]{2})$');

if (re.test(Request.QueryString("Value"))){
    var tmp=Request.QueryString("Value")+"";
    var i=tmp.indexOf("/");
    var gg=tmp.substr(0,i);
    var j=tmp.indexOf("/",i+1);
    var mm=tmp.substr(i+1,j-i-1);
    var aa=tmp.substr(j+1);

    Oggi=new Date(aa,mm-1,gg);
}else{
    Oggi=new Date();
}

var DataIniziale=  (Oggi.getMonth()+1) + "," + Oggi.getFullYear() + "," + Oggi.getDate();
var AnnoIniziale=Oggi.getFullYear();
var tmp;

var Fld2Fill=Request.QueryString("Fld");

var Mesi=new Array();
Mesi[1]="gennaio";
Mesi[2]="febbraio";
Mesi[3]="marzo";
Mesi[4]="aprile";
Mesi[5]="maggio";
Mesi[6]="giugno";
Mesi[7]="luglio";
Mesi[8]="agosto";
Mesi[9]="settembre";
Mesi[10]="ottobre";
Mesi[11]="novembre";
Mesi[12]="dicembre";

var LeftMesi=(LarghezzaLayer*7) + LeftInit + 20
var tmpTopMesi=TopMesiInit;

for (var i=1; i<13;i++){
    
    if (i==Oggi.getMonth()+1){
        Giorni+="<div class=divNorm  id=M" + i + " style='position:absolute; width:" + (LarghezzaLayer*7) + "px; " +
                "height:" + AltezzaLayer + "px; z-index:1; left: " + LeftInit + "px; top: " + TopInit + "px;'>" + 
                "<a href='javascript:' onclick='CambiaMese(" + i + ")'>" + Mesi[i] + "</a></div>\n";
        
        TopInit+=AltezzaLayer;
    
    }else{
        Giorni+="<div class=divNorm  id=M" + i + " style='position:absolute; width:" + LarghezzaLayerMese + "px; " +
                "height:" + AltezzaLayer + "px; z-index:1; left: " + LeftMesi + "px; top: " + tmpTopMesi + "px;'>" + 
                "<a href='javascript:' onclick='CambiaMese(" + i + ")'>" + Mesi[i] + "</a></div>\n";
            
        tmpTopMesi+=AltezzaLayer;    
    }

}
    
for (var i=1; i<8;i++){
    tmp=(LarghezzaLayer*(i-1)) + LeftInit;    
    Giorni+="<div class=divIntest style='position:absolute; width:" + LarghezzaLayer + "px; " +
            "height:" + AltezzaLayer + "px; z-index:1; left: " + tmp + "px; top: " + TopInit + "px;'>" + 
            GS[i] + "</div>\n";

}
            
for (var i=1; i<32;i++){
    
    Giorni+="<div class=divNorm  id=G" + i + " style='position:absolute; width:" + LarghezzaLayer + "px; " +
            "height:" + AltezzaLayer + "px; z-index:1; visibility: hidden; left: 1px; top: 1px;'>" + 
            "<a href='javascript:' onclick='SetData(" + i + ")'>" + i + "</a></div>\n";

}

for (var i=1; i<15;i++){
    Giorni+="<div class=divNorm id=B" + i + " style='position:absolute; width:" + LarghezzaLayer + "px; " +
            "height:" + AltezzaLayer + "px; z-index:1; visibility: hidden; left: 1px; top: 1px;'>" + 
            "&nbsp;</div>\n";


}

var scpt = "var TopInit=" + (TopInit+AltezzaLayer) + ";\n" +
           "var LeftInit=" + LeftInit + ";\n" +
           "var AltezzaLayer=" + AltezzaLayer + ";\n" +
              "var TopMeseInit=" + TopMesiInit + ";\n" +
           "var LeftMese=" + LeftMesi + ";\n" +
           "var Fld2Fill='" + Fld2Fill + "';\n" +
              "var LarghezzaLayerMese=" + LarghezzaLayerMese + ";\n" +           
           "var LarghezzaLayer=" + LarghezzaLayer + ";\n";
           
           
%>

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../CSS/calendario.css" rel="stylesheet" type="text/css">
</head>
<script language="JavaScript">

<%=scpt%>
var GiorniMese=new Array();
var Mese;
var Anno;
var Giorno;

GiorniMese[1]=31;
GiorniMese[2]=28;
GiorniMese[3]=31;
GiorniMese[4]=30;
GiorniMese[5]=31;
GiorniMese[6]=30;
GiorniMese[7]=31;
GiorniMese[8]=31;
GiorniMese[9]=30;
GiorniMese[10]=31;
GiorniMese[11]=30;
GiorniMese[12]=31;

function ShowCal(mese,anno, giorno){
    
    if (!((giorno+"")=="undefined")) Giorno=new Number(giorno);
    Mese=mese;
    Anno=anno;
    
    var CurTop=TopInit;
    var CurLeft;
    var Data=new Date(anno,mese-1,1);
    var CurDay;
    
    //ricerca bisestile    
    if (mese==2){
        var d1=new Date(anno,mese-1,29);
        if (d1.getDate()==29){
            GiorniMese[2]=29;
        }else{
            GiorniMese[2]=28;
        }
    }
    
    //nascondo i layer vuoti
    for (var i=1;i<15;i++){
        document.getElementById('B' + i).style.visibility="hidden";
    }
    
    CurDay=Data.getDay()-1;

    if (CurDay==-1)CurDay=6;
    
    //layer vuoti all'inizio
    var cont=1;
    for (var i=0;i<CurDay;i++){
        CurLeft=i * LarghezzaLayer + LeftInit;
        document.getElementById('B' + cont).style.visibility="visible";
        document.getElementById('B' + cont).style.top=CurTop;
        document.getElementById('B' + cont).style.left=CurLeft;
        cont++;
    }
    
    CurLeft=CurDay * LarghezzaLayer + LeftInit;
    //layer con i giorni giusti
    var colore;

    for (var i=1;i<=GiorniMese[mese];i++){
        document.getElementById('G' + i).style.visibility="visible";
        document.getElementById('G' + i).style.top=CurTop;
        document.getElementById('G' + i).style.left=CurLeft;
        
        if (CurDay==5 || CurDay==6) colore="gray"
        else colore="white"

        if (i==Giorno) colore="yellow";
            
        document.getElementById('G' + i).style.backgroundColor=colore;
        
        CurDay++;
        if (CurDay==7){
            CurDay=0;
            CurTop+=AltezzaLayer;
        }
        CurLeft=CurDay * LarghezzaLayer + LeftInit;
    }

    //layer vuoti alla fine
    if (CurDay>0){
        for (var i=CurDay;i<7;i++){
            CurLeft=i * LarghezzaLayer + LeftInit;
            document.getElementById('B' + cont).style.visibility="visible";
            document.getElementById('B' + cont).style.top=CurTop;
            document.getElementById('B' + cont).style.left=CurLeft;
            cont++;
        }
    }
            
    //nascondo i layer degli altri giorni 
    for (var i=GiorniMese[mese]+1;i<=31;i++){
        document.getElementById('G' + i).style.visibility="hidden";
    }

    
}

function CambiaAnno(){
    
    var re = new RegExp('^[0-9]{4}$');
    
    if ((re.test(document.all.txtAnno.value))) {
        ShowCal(Mese,document.all.txtAnno.value);
    }


}


function PiuMenoAnno(val){
    var re = new RegExp('^[0-9]{4}$');
    
    if ((re.test(document.all.txtAnno.value))) {
        var tmp=new Number(Anno);
        tmp=tmp.valueOf() + val;
        document.all.txtAnno.value=tmp;
        ShowCal(Mese,tmp);
    }
}

function CambiaMese(m){
    
    
    var tmpTopMesi=TopMeseInit;
    for (var i=1;i<13;i++){
        if (i==m){
            document.getElementById('M' + i).style.top=TopInit-2*AltezzaLayer;
            document.getElementById('M' + i).style.left=LeftInit;
            document.getElementById('M' + i).style.width=LarghezzaLayer*7;
        }else{
            document.getElementById('M' + i).style.top=tmpTopMesi;
            document.getElementById('M' + i).style.left=LeftMese;
            document.getElementById('M' + i).style.width=LarghezzaLayerMese;
            tmpTopMesi+=AltezzaLayer;
        }
    }
    
    ShowCal(m,Anno);
}

function SetData(giorno){

    var g;
    var m;
    
    if (giorno<10) giorno ='0'+giorno;
    if (Mese<10) Mese='0' + Mese;
    var ret=giorno + "/" + Mese + "/" + Anno;

    window.opener.document.getElementById(Fld2Fill).value=ret;
    //window.opener.SetData(ret);
    window.close();
}

</script>
<body onLoad="ShowCal(<%=DataIniziale %>)">
<div align="center" id="Layer1" style="position:absolute; width: <%=LarghezzaLayer*7 %>px; height:26px; z-index:1; left: <%=LeftInit%>px; top: 35px;"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Anno</strong> 
  </font> 
  <input  onKeyUp="CambiaAnno()" onChange="CambiaAnno()" type="text" name="txtAnno" maxlength="4" size="5" value=<%=AnnoIniziale%>>
 <a href="javascript:" onClick="PiuMenoAnno(-1)" ><img src="../img/frecciecalendariogiu.GIF" alt="diminuisci anno" ></a>
  <a href="javascript:" onClick="PiuMenoAnno(1)" ><img src="../img/frecciecalendariosu.GIF" alt="aumenta anno" ></a>
</div>

<%=Giorni%> 
</body>
</html>


che richiama
<script language="JavaScript">
        function ApriCalendario(fld){
                
            var alt=280;
            var larg=375;
            var left=(screen.width - larg) / 2;
            var top=(screen.height - alt) / 2;
                    
            var str="left=" + left + ",top=" + top + ",status=no, " +
                    "menubar=no,scrollbars=no,resizable=no,width=" + larg + ",height=" + alt;
                    
            var str2="include/calendario.asp?Fld=" + fld  + "&Value=" + document.all.item(fld).value;
            window.open(str2,"", str);
        }
        
        function CheckFieldDate(fld, descrizione){
        
            var re = new RegExp('^((0[1-9])|([12][0-9])|(3[01]))[/-]((0[1-9])|(1[012]))[/-]((19)|(20))([0-9]{2})$');

            if (!(re.test(fld.value))){
                alert('Campo ' + descrizione + ': formato data non corretta');
                fld.focus();
                   return false;
    
            }else{
                return true;
            }
        }
                        
</script>
Per riassumere:

- se uso il programma con windows XP tutto funziona
- se uso il programma con Windows 7 (aggiornato) si apre il calendario, mi fa selezionare data, giorno, anno, ma non mi fa confermare dandomi errore "formato data non corretta"
- se uso il programma con windows 7 fresco di installazione, e quindi senza aggiornamenti, funziona correttamente.

Da principiante java, giuro che proprio non capisco il motivo.

Qualsiasi suggerimento è molto gradito.

7 Risposte

  • Re: Incompatibile con nuovi SO

    Mi sa che sei oltre il principiante di java, io di quel linguaggio lì non vedo nulla.
  • Re: Incompatibile con nuovi SO

    Quella è una pagina ASP (Active Server Page) che utilizza JavaScript come linguaggio di programmazione (sempre lato server) - tra l'altro andava di moda usare VBScript e non di certo JavaScript per la parte server side.
    Stiamo parlando di una tecnologia già vecchia quando nel 2001 usciva la versione 1.0 del Framework .NET e palesemente obsoleta quando nel 2004 venne rilasciato .NET 1.1.
    L'interazione Lato Client col calendario è demandata alla funzione JavaScript "ApriCalendario". Il problema sta proprio su questa funzione e la sua esecuzione da parte del brower.

    Fatta questa premessa, in totale accordo con +m+ (cosa assai rara ) convengo che non ci sia nulla che riguardi JAVA nel tuo thread. A tal proposito sposto nella sezione JavaScript .
  • Re: Incompatibile con nuovi SO

    Come esordio una bella figura di m.... non c'è , male.
    Scusate...
  • Re: Incompatibile con nuovi SO

    Tranquillo nessuno nasce "imparato" (almeno per ora )
  • Re: Incompatibile con nuovi SO

    Spero la pensi così, anche chi poteva avere intenzione di darmi qualche suggerimento...
  • Re: Incompatibile con nuovi SO

    A occhio vedo che non hai fatto l'unescape dello slash nella regexp.
    Devi sicuramente sostituire "/" con "\/".
  • Re: Incompatibile con nuovi SO

    ...come volevasi dimostrare...

    Grazie a tutti lo stesso...
Devi accedere o registrarti per scrivere nel forum
7 risposte