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;'>" +
" </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.