[AJAX] [Struts] Pas d'affichage des boutons lors du raffraîchissement
Salut à tous!
J'ai un petit souci d'affichage avec Ajax :
Je rafraichis le "div" suivant grâce à Ajax :
Code:
1 2 3 4 5 6
| <div id = "divUpdateResultSearch">
<%@ include file="searchControlResult.jsp" %>
<script>
initDataElement()
</script>
</div> |
voici le code de ma jsp qui est incluse :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <c:if test="${sessionScope.searchResult!=null}">
<br><br>
<table>
<tr>
<td>
<c:forEach var="resultat" items="${sessionScope.searchResult}">
<div class="recherche">
<h3 class="resultatnom"><center><c:out value="${resultat.name}"/></center></h3>
<table>
<c:forEach var="field" items="${resultat.fields}">
<tr>
<td>
<c:out value="${field.name}"></c:out>
</td>
<td>
<table class="resultatfield">
<tr>
<c:forEach var = "valeur" items="${field.values}">
<td>
<c:out value="${valeur}"></c:out>
</td>
</c:forEach>
</tr>
</table>
</td>
</tr>
</c:forEach>
</table>
</div>
</c:forEach>
</td>
<td valign="top">
<table>
<tr>
<center>
<td><h4 class="titre"><bean:message key="search.manageElement"/></h4></td>
<td></td>
</center>
</tr>
<%
// get the ApiIdex
ApiIdexAnne apiIdex =ApiIdexAnne.getInstance();
//ArrayList list = apiIdex.getLabelCommandEnabledOnElement(session.getAttribute("idElement").toString());
ArrayList list = apiIdex.getCommandEnabledOnElement(session.getAttribute("idElement").toString());
System.out.println("JSP update => size = "+list.size());
for(int i=0;i<list.size();i++){
TupleCommandParam tupleCommad = (TupleCommandParam)list.get(i);
System.out.println("JSP update => boucle = "+i+" command = "+tupleCommad.getLabelCommand());
%>
<tr>
<%
if(tupleCommad.getParametersFacultatives()!=null && ((ArrayList)tupleCommad.getParametersFacultatives()).size()!=0){
%>
<html:form action= "/searchControl">
<center>
<td align="center">
<button type="submit" class="commande" onclick="testValueNotNull(this);" >
<span class="commandetexte"><%=tupleCommad.getLabelCommand()%></span>
</button>
</td>
<td>
<html:hidden property="whatToDo" value="command"/>
<html:text property="paramFacultative" value=""/>
<html:hidden property="idCommand" value="<%=tupleCommad.getIdCommand()%>"/>
</td>
</center>
</html:form>
<%
} else {
%>
<html:form action= "/searchControl" >
<center>
<td align="center">
<button type="submit" class="commande" onclick="submit()" >
<span class="commandetexte"><%=tupleCommad.getLabelCommand()%></span>
</button>
</td>
<td>
<html:hidden property="whatToDo" value="command"/>
<html:hidden property="idCommand" value="<%=tupleCommad.getIdCommand()%>"/>
</td>
</center>
</html:form>
<%}%>
</tr>
<%}%>
</table>
</td>
</tr>
</table>
</c:if> |
Voici mon code js :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| var refreshDataElement = 5000 ; //Période de mise à jour des données, en milisecondes.
var requestDataElement = null; // Objet XMLhttpRequest necessaire pour récupérer les données.
var dataElement = null;
var getDataElementTimeoutId = null;
/*
* initialisation de recuperation periodiique des events
*/
function initDataElement()
{
getDataElementTimeoutId=setTimeout("getDataElement()",2000);
}
/*
* demande de recuperation des alamres
*/
function getDataElement()
{
//Creation de l'instance de XMLhttpRequest en fonction du navigateur
if (window.XMLHttpRequest) // Objet de la fen?tre courant
{
requestDataElement = new XMLHttpRequest(); // Firefox, Safari, ...
// requestImage.overrideMimeType('text/xml');
}
else
if (window.ActiveXObject) // Version Active
{
requestDataElement = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
}
//Preparation et envoie de la requete
requestDataElement.onreadystatechange=xmlHttpHandler_processXML;
requestDataElement.open("GET", "searchControlResult.do", true);
requestDataElement.setRequestHeader("Cache-Control","no-store"); //Pour ne pas mettre en cache le resultat, sinon apres, il refait jamais de requetes...
requestDataElement.setRequestHeader("Pragma","no-cache");
requestDataElement.send(null); //(a enlever)
//Attente de la nouvelle mise a jour
getDataElementTimeoutId=setTimeout("getDataElement()",refreshDataElement);
}
/*
* fonction appelee a chaque changement d'etat de la requete
*/
function xmlHttpHandler_processXML()
{
if (requestDataElement.readyState==4) //etat = 4 sigifie que la reponse est arrivee
{
if (requestDataElement.status == 200 ) //reponse correct
{
dataElement=requestDataElement.responseText;
replaceDataElement();
}
else
{
alert("FICHIER MAL RECU : \n voila le contenu : \n"+ requestDataElement.responseText);
}
}
}
/*
* remplace les anciennes valeurs par les nouvelles
*/
function replaceDataElement()
{
emplacementDataElement=window.document.getElementById("divUpdateResultSearch");
emplacementDataElement.innerHTML = dataElement;
} |
Mon souci est le suivant :
La partie en gras dans la jsp incluse dans le div que je rafraichis ne se met pas à jour sur la page :
Je devrais avoir normalement des boutons (par l'utilisation de la stylesheet) avec marqué dessus les trucs que je récupère en java.
Or avec des tests en mettant des system.out.println() dans mon codes java qui se trouve dans ma jsp, je vois bien que normalement il devrait y avoir des commandes affichées ce qui n'est pas le cas....
A tout hasard, voici le code de la css qui correspond à la partie des boutons :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| /*Classe pour les boutons des commandes*/
.commande{
background:#ffffff url(buttonCommand.png) repeat-x bottom left;
padding:5px 5px 5px 5px;
border:none;
height: 55px;
width:260px;
}
/*Classe pour le texte des bouton*/
.commandetexte{
font-family: Verdana, Arial, Helvetica, Geneva, sans-serif;
font-style:bold;
color: #660099;
font-size: 12pt ;
margin-left : 5px;
margin-right : 5px;
margin-bottom : 5px;
} |
Quelqu'un a une idée?