[STRUTS-WML] espaces inutiles...

espaces inutiles... [STRUTS-WML] - Java - Programmation

Marsh Posté le 10-04-2006 à 16:24:45    

Bonjour à tous,
j'ai un petit problème que je n'arrive pas à régler et je me demandais si vous pouviez m'aider ?!

 

Voilà mon prblème est le suivant : dans le cadre d'un dévellopement d'un site Wap, j'ai décidé d'utiliser Struts et les JSP. Le problème est que à cause du wap, j'ai une contrainte assez emmerdante :  je dois avoir des pages wml de maximum de 10ko. Or, lorsque Struts me génére mes apges il rajoute énormément d'espaces (dans les 5ko) et je souhaiterai donc savoir si quelqu'un sait s'il existe un moyen pour que Struts me génère les pages wml avec un minimum de caractères inutile ?  :bounce:

Reply

Marsh Posté le 10-04-2006 à 16:24:45   

Reply

Marsh Posté le 11-04-2006 à 16:25:22    

Il n'y a aucun expert Struts sur ce forum ou mon message n'est peut être pas assez clair ? (je me demande si ca ne viendrait pas de NetBeans mais ej en suis aps sure ?!)

Reply

Marsh Posté le 11-04-2006 à 17:14:53    

Je crois qu'il y avait eu une question comme ça il y a peu et il me semble qu'il était dit qu'il fallait mettre les imports sur une seule ligne (entre autres astuces), ainsi le fichier généré ne comportait pas de lignes vides au début.


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

Marsh Posté le 11-04-2006 à 17:24:46    

Merci pour ta réponse Mario_ mais jca n'a rien donnée :(
Je vais essayer de trouver le sujet dont tu parles...

Reply

Marsh Posté le 11-04-2006 à 19:01:38    

le coups des imports en tête de fichier ca pose problème pour avoir un fichier xml valide (commençant par <?xml version=1.0 ...?> ), c'est visiblement pas ça le problème de notre ami ...
 
Une solution bourine mais qui marche : tu mets un filtre qui parse ce qui sors de ton site et qui le recrache en virant les espaces inutiles ... ca se fait en quelques lignes avec du parsing sax ... le codage du filtre en lui même est un peu plus délicat ...
je peux t'aiguiller là dessus si tu veux ...
 
Mais tu es sûr que ca pose vraiment problème ? généralement, les gateway wap (wap1) binarise le WML => les espaces sont supprimés

Reply

Marsh Posté le 12-04-2006 à 16:52:27    

Pour le filtre j'y avais déjà pensé mais les problèmes des ressources prises par le filtrage sont assez embêtantes :(
Sinon pour le fait que ca pose un probleme, ben en fait je ne sais pas encore par quel type de gateway wap je vais passer donc je voulais me proteger contre toutes les possibilités !
Je vais essayer cette solution de filtre et je vous tient au courant  :bounce:

Message cité 1 fois
Message édité par Kineas le 12-04-2006 à 16:52:58
Reply

Marsh Posté le 12-04-2006 à 21:37:11    

Kineas a écrit :

Pour le filtre j'y avais déjà pensé mais les problèmes des ressources prises par le filtrage sont assez embêtantes :(


bha le wml c'est des petites pages, et généralement du faible traffic ... et du parsing sax c'est pas ce qu'il y a de plus gourmand ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 13-04-2006 à 11:18:49    

Citation :

Or, lorsque Struts me génére mes apges il rajoute énormément d'espaces (dans les 5ko) et je souhaiterai donc savoir si quelqu'un sait s'il existe un moyen pour que Struts me génère les pages wml avec un minimum de caractères inutile ?


 
Je ne suis pas sur que ce soit Strut qui "ajoute" les espaces. Ces espaces viennent peut être de la façon dont tu indentes les tags html/struts.
 
Tu peux nous monter une de tes jsp ?


Message édité par Bidem le 13-04-2006 à 11:19:07
Reply

Marsh Posté le 13-04-2006 à 11:33:27    

Ok mais ca prend un peu de place quand même...

Code :
  1. <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
  2. <%@ taglib uri="/WEB-INF/struts-wml.tld" prefix="wml" %>
  3. <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
  4. <%@page contentType="text/vnd.wap.wml"%>
  5. <%@page pageEncoding="ISO-8859-1"%>
  6. <%@page import="com.opensugar.util.Configuration"%>
  7. <%@page import="java.util.Collection"%>
  8. <%--
  9. The taglib directive below imports the JSTL library. If you uncomment it,
  10. you must also add the JSTL library to the project. The Add Library... action
  11. on Libraries node in Projects view can be used to add the JSTL 1.1 library.
  12. --%>
  13. <%--
  14. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  15. --%>
  16. <%--
  17. Contrôle de login
  18. --%>
  19. <%@include file="/partieCommune/wap/include/validerSession.jsp"%>
  20. <card id="cMess" title="<bean:message key="cMess.titre"/>"> 
  21.     <%--
  22.     Contrôle de message spécifique
  23.     --%>
  24.     <jsp:include page="/partieCommune/wap/include/messageEnTete.jsp" />
  25.     <%--
  26.     Contrôle de nouveaux messages
  27.     --%>
  28.     <jsp:include page="/partieCommune/wap/include/nouveauxMessagesRecus.jsp" />
  29.     <%--
  30.     Contrôle de nouveaux evenements
  31.     --%>
  32.     <jsp:include page="/partieCommune/wap/include/nouveauxEvenementsRecus.jsp" />
  33.     <p align="left"><small>
  34.         <%--
  35.         Contrôle de message spécifique
  36.         --%>
  37.         <jsp:include page="/partieCommune/wap/include/messageEnTete.jsp" />
  38.            
  39.         <b><bean:message key="cMess.dossier"/></b>
  40.         <logic:present name="dossierCourant">
  41.             <bean:write name="dossierCourant" />
  42.         </logic:present>
  43.         :<br/>
  44.         <logic:empty name="lesMessages">
  45.             <bean:message key="cMess.aucun"/> !<br/>
  46.         </logic:empty>
  47.         <logic:present name="lesMessages">
  48.             <logic:iterate id="Messages" name="lesMessages">
  49.                 <logic:equal name="Messages" property="lu" value="false">
  50.                     <b>
  51.                 </logic:equal>
  52.                     - <bean:write name="Messages" property="date" format="dd/MM/yyyy HH:mm"/> -
  53.                     <anchor>
  54.                         <logic:equal name="Messages" property="type" value="message">                       
  55.                             <bean:write name="Messages" property="titre"/>
  56.                         </logic:equal>
  57.                         <logic:equal name="Messages" property="type" value="alerte">
  58.                             <bean:define id="titreAlerte" name="Messages" property="titre"/>
  59.                             <bean:message key="${titreAlerte}"/>
  60.                             <bean:define id="exp" name="Messages" property="expediteur"/>
  61.                             <bean:write name="exp" property="login"/>
  62.                         </logic:equal>
  63.                         <logic:equal name="Messages" property="type" value="blame">
  64.                             <bean:define id="titreBlame" name="Messages" property="titre"/>
  65.                             <bean:message key="${titreBlame}"/>
  66.                         </logic:equal>
  67.                         <logic:equal name="Messages" property="type" value="invitation">
  68.                             <bean:define id="titreInvitation" name="Messages" property="titre"/>
  69.                             <bean:message key="${titreInvitation}"/>
  70.                         </logic:equal>
  71.                         <logic:equal name="Messages" property="type" value="alerteSimple">
  72.                             <bean:define id="titreAlerteSimple" name="Messages" property="titre"/>
  73.                             <bean:message key="${titreAlerteSimple}"/>
  74.                         </logic:equal>
  75.                         <wml:go action="lireMessage" method="post">
  76.                             <postfield name="id" value="<bean:write name="Messages" property="idMessage"/>" />
  77.                         </wml:go>
  78.                     </anchor><br/>
  79.                     <logic:equal name="Messages" property="lu" value="false">
  80.                 </b>
  81.                 </logic:equal>
  82.             </logic:iterate>
  83.             <%--
  84.             Cas de plusieurs pages
  85.             --%>
  86.             <%
  87.                 if ( ((Integer) request.getSession().getAttribute("debPageA" )).intValue() > 1) {
  88.                     int debPageAMM = ((Integer) request.getSession().getAttribute("debPageA" )).intValue() - 1;
  89.             %>
  90.             <anchor>&lt;<bean:message key="general.pageP"/><%out.print( debPageAMM );%>
  91.                 <wml:go action="afficherMessagerie" method="post">
  92.                     <postfield name="debPageMessgerie" value="<%out.print( debPageAMM );%>"/>
  93.                 </wml:go>
  94.             </anchor>
  95.             <%
  96.                 }
  97.                 if ( ((Collection) request.getSession().getAttribute("lesMessages" )).size() == Configuration.NB_MAX_RESULTATS_AFFICHES ) {
  98.                     int debPageAPP = ((Integer) request.getSession().getAttribute("debPageA" )).intValue() + 1;
  99.             %>
  100.             <anchor><bean:message key="general.pageS"/><%out.print( debPageAPP );%>&gt;
  101.                 <wml:go action="afficherMessagerie" method="post">
  102.                     <postfield name="debPageMessgerie" value="<%out.print( debPageAPP );%>"/>
  103.                 </wml:go>
  104.             </anchor><br/>
  105.             <%
  106.                     }
  107.             %>
  108.         </logic:present>
  109.         <br/>
  110.        
  111.         <%--
  112.         Lien pour effacer tous les messages
  113.         --%>
  114.         <logic:notEmpty name="lesMessages">       
  115.             <anchor>
  116.                 <bean:message key="cMess.effacerTous"/>
  117.                 <wml:go action="retirerTous" method="post"/><br/>
  118.             </anchor>
  119.             <br/>
  120.         </logic:notEmpty>
  121.        
  122.         <%--
  123.         Liens pour changer de dossier et gérer les dossiers
  124.         --%>
  125.         <b><bean:message key="cMess.autresDoss"/> </b>(
  126.         <anchor>
  127.             <bean:message key="general.gerer"/>
  128.             <wml:go action="dossier" method="post"/>
  129.         </anchor>
  130.         ) : <br/>
  131.         <logic:present name="lesDossiers">
  132.             <logic:iterate id="Dossiers" name="lesDossiers">
  133.                 <anchor>
  134.                     - <bean:write name="Dossiers" property="nom"/> (<bean:write name="Dossiers" property="nbMessages"/> )
  135.                     <wml:go action="afficherMessagerie" method="post">
  136.                         <postfield name="nom" value="<bean:write name="Dossiers" property="nom"/>" /><br/>
  137.                     </wml:go>
  138.                 </anchor>
  139.             </logic:iterate>
  140.         </logic:present>
  141.         <br/>
  142.        
  143.         <%--
  144.         Lien pour envoyer un message
  145.         --%>
  146.         <anchor>
  147.             <bean:message key="cMess.envoyerMess"/>
  148.             <wml:go action="ecrireMessage" method="post">
  149.                 <postfield name="choix" value="0"/>
  150.                 <postfield name="defautDest" value=""/>
  151.             </wml:go>
  152.         </anchor><br/>
  153.         <%--
  154.         Liens de retour
  155.         --%>
  156.         <anchor><bean:message key="general.retEcrantitre"/><wml:go action="jeu" method="post"/></anchor><br/>
  157.         <anchor><bean:message key="general.retAccueil1"/><wml:go action="index" method="post"/></anchor><br/>               
  158.     </small></p>     
  159. </card>


 
Voila désolé pour la place prise mais je voyais pas comment faire autrement (je connaissait un site avant qui permettait de mettre du code lisible par tout le monde mais j'ai perdu l'adresse... :bounce:

Reply

Marsh Posté le 13-04-2006 à 14:21:19    

La plus part des espaces inutiles sont pour l'indentation.
 
Astuce pour réduire ça :
 - indenter avec 2 espaces au lieu de 4
 - indenter avec tabulation
 
De plus les blocs de code les plus indentés sont dans des <logic:iterate>
donc s'il y a beaucoup d'éléments dans tes listes (lesMessages et lesDossiers) ça va multiplier ke nombre d'espaces.
 
Optimisation des <logic:iterate> :
 
- On supprime toute l'indentation (c'est bourrin et le code est moins lisible mais on gagne beaucoup en taille)

Code :
  1. <logic:iterate id="Dossiers" name="lesDossiers">
  2. <anchor>
  3. - <bean:write name="Dossiers" property="nom"/> (<bean:write name="Dossiers" property="nbMessages"/> )
  4. <wml:go action="afficherMessagerie" method="post">
  5. <postfield name="nom" value="<bean:write name="Dossiers" property="nom"/>" /><br/>
  6. </wml:go>
  7. </anchor>
  8. </logic:iterate>


On peut être encore plus bourrin en supprimant aussi tous les retours à la ligne.
 
 - On diminue le niveau d'indentation à l'intérieur des <logic:iterate>
    C'est un bon compromi entre lisibilité et gain de place

Code :
  1. <logic:iterate id="Dossiers" name="lesDossiers">
  2.   <anchor>
  3.     - <bean:write name="Dossiers" property="nom"/> (<bean:write name="Dossiers" property="nbMessages"/> )
  4.     <wml:go action="afficherMessagerie" method="post">
  5.       <postfield name="nom" value="<bean:write name="Dossiers" property="nom"/>" /><br/>
  6.     </wml:go>
  7.   </anchor>
  8. </logic:iterate>


Message édité par Bidem le 13-04-2006 à 14:23:43
Reply

Marsh Posté le 13-04-2006 à 14:21:19   

Reply

Marsh Posté le 13-04-2006 à 14:36:06    

Ben en fait j'ai déjà essayer d'enlever toute l'indentation (raccourci ctrl+a et shift+tab très pratique :) ) mais cela n'a rien chnagé lorsque j'ai affiché la source de la page (je test mes pages wap avec Opéra) !
Ce qui me fait penser : serait-il possible que Opéra m'affiche le code source "indenter à sa facon" ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed