J'ai travaillé sur un projet Java dans lequel les rapports seront générés en HTML, donc j'implémente des méthodes pour créer ces rapports. Une fonctionnalité importante est de pouvoir avoir autant d'informations que possible dans les tableaux, mais toujours pas trop encombrer. En d'autres termes, les détails devraient être disponibles si l'utilisateur souhaite les voir mais pas nécessairement visibles par défaut.Problèmes javascript lors de la génération de rapports html depuis java
J'ai fait quelques recherches et tests et trouvé un modèle intéressant pour cacher/montrer du contenu avec l'utilisation de CSS et javascript, le problème est que lorsque j'essaie la page html résultante les scripts ne fonctionnent pas. Je ne suis pas sûr si c'est un problème dans Java ou dans le javascript lui-même. J'ai comparé le code html que java produit à la source où j'ai trouvé le template, ils semblent correspondre assez bien.
Voici des morceaux de mon code java qui génère le javascript et le contenu, je serais très heureux si quelqu'un peut indiquer les raisons possibles de ce problème:
// va à la tête
private void addShowHideScript() throws IOException{
StringBuilder sb = new StringBuilder();
sb.append("<script type=\"text/javascript\" language=\"JavaScript\">\n");
sb.append("<!--function HideContent(d) {\n");
sb.append("document.getElementById(d).style.display=\"none\";}\n");
sb.append("function ShowContent(d) {\n");
sb.append("document.getElementById(d).style.display=\"block\";}\n");
sb.append("function ReverseDisplay(d) {\n");
sb.append("if(document.getElementById(d).style.display==\"none\")\n");
sb.append("{ document.getElementById(d).style.display=\"block\"; }\n");
sb.append("else { document.getElementById(d).style.display=\"none\"; }\n}\n");
sb.append("//--></script>\n");
out.write(sb.toString());
out.newLine();
}
// corps
private String linkShowHideContent(String pathname, String divname){
StringBuilder sb = new StringBuilder();
sb.append("<a href=\"javascript:ReverseDisplay('");
sb.append(divname);
sb.append("')\">");
sb.append(pathname);
sb.append("</a>");
return sb.toString();
}
// contenu
out.write(linkShowHideContent("hidden content", "ex"));
out.write("<div id=\"ex\" style=\"display:block;\">");
out.write("<p>Content goes here.</p></div>");
Mise à jour // un morceau du code html de la page qui reflète le problème
<html><head><style type="text/css">
#table {font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; width:75%;border-collapse:collapse;}
#table td, #table th {font-size:1em;border:1px solid #98bf21;padding:5px 8px 5px 10px;}
#table th {font-size:1.2em;text-align:left;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#fff;}
#table tr.alt td {color:#000;background-color:#EAF2D3;}
</style></head><body>
<h2> QUERY RESULTS </h2>
<script type="text/javascript" language="javascript">
<!--function HideContent(d) {
document.getElementById(d).style.display="none";}
function ShowContent(d) {
document.getElementById(d).style.display="block";}
function ReverseDisplay(d) {
if(document.getElementById(d).style.display=="none")
{ document.getElementById(d).style.display="block"; }
else { document.getElementById(d).style.display="none"; }
}
//--></script>
<a href="javascript:ReverseDisplay('ex')">hidden content</a>
<div id="ex" style="display:block;">
<p>Content goes here.</p></div>
Que voulez-vous dire qu'ils ne Ne travaillez pas? Vous obtenez des erreurs JavaScript, actualisation de la page ... quoi exactement? –
Que diriez-vous de nous donner le fichier HTML résultant au lieu du code Java. Il serait plus facile de suivre le bug de ce côté ... – ivans
bien désolé pour l'ambiguïté: je n'obtiens aucune action, c'est le problème. Tout le texte statique est là mais les liens qui devraient montrer le contenu ne font pas cela. Je vais essayer d'ajouter le fichier HTML, mais je ne sais pas trop comment .. Ce n'est pas un serveur. Donc j'ai c/p: ed quelques parties de la source de la page. – posdef