2009-01-13 11 views
1

Est-il possible d'obtenir des entretoises 2 (en utilisant des tuiles) pour construire la page entière avant de l'envoyer au navigateur? Je ne veux pas que la page soit construite "progressivement" dans le navigateur une partie à la fois.Rendu page complète et pas "progressivement" (en utilisant des entretoises 2/tuiles)

Le problème principal que j'essaie de résoudre est qu'Internet Explorer 7 clignote/clignote la page même si seulement une partie du contenu change (firefox le fait beaucoup plus facilement).

Alors que si j'ai une page avec:

HEADER

un contenu

FOOTER

Et la région "un peu de contenu" que les changements entre les charges de page, la partie FOOTER encore clignote le fond blanc avant de le remplir avec la couleur de fond du pied de page. Je pensais que peut-être en obtenant des entretoises pour envoyer la page complète, il se chargerait assez vite pour éliminer le "clignotant". Maintenant, le FOOTER vient du serveur un peu plus tard que les parties précédentes et donc il clignote (dans Internet Explorer, Firefox affiche la page en douceur). NB: il s'agit d'une exigence importante pour le site, et l'utilisation d'ajax pour charger le contenu intermédiaire est supprimée (comme le sont les trames ou autres "hacks"). Le site est construit en utilisant CSS et pas une disposition de table, peut-être je vais devoir utiliser une disposition de table pour le faire fonctionner ...

À propos de l'utilisation des tuiles paramètre de vidage: J'ai essayé cela et cela ne fonctionne pas comme J'ai besoin. J'aurais besoin d'un flush-paramètre pour toute la page. J'ai essayé la directive de page jsp normale "autoFlush = false" mais cela n'a pas fonctionné. J'ai mis cette directive sur ma page principale (et non dans les carreaux).

Voici un exemple du modèle principal, qui utilise des modèles d'en-tête, de corps et de pied de page. Avec le Thread.sleep() j'ai ajouté le problème est facile à repérer. Le pied de page s'affiche 2 secondes plus tard que le reste de la page.

<body> 
    <div id="container"> 
    <t:insertAttribute name="header" flush="false" /> 

    <div id="content"><t:insertAttribute name="body" flush="false"/></div> 

    <div class="clear"></div> 
    <% Thread.sleep(2000); %> 
    <t:insertAttribute name="footer" flush="false" /> 
    </div> 
    </body> 

MISE À JOUR

Merci pour les commentaires. L'exigence est en fait presque raisonnable car ce n'est pas une page web normale, pensez intégrée.

Mais apparemment il n'y a aucun moyen de configurer IE pour commencer le rendu après un certain délai (comme firefox a un retard configurable de quelques 100ms)?

J'ai essayé d'intercepter le TilesResult mais la méthode doExecute est exécutée avant que tout le contenu ne soit apparemment évalué. La méthode est donc déjà terminée avant l'évaluation de jsp (mon test Thread.sleep()). Je me demandais comment je pourrais rendre toute la réponse à une chaîne et ensuite la sortie tout à la fois au navigateur. Je sais que ce n'est pas infaillible et les retards de réseau, etc peuvent prendre en compte cela, mais si je pouvais obtenir la réponse à la sortie tout à la fois et peut-être utiliser une mise en page basée sur la table ferme) cela pourrait fonctionner raisonnablement.

Ou alors essayer d'obtenir cette passe à Firefox ou peut-être oublier tout ce petit pépin ...

MISE À JOUR 2

Cela a commencé à me déranger si je l'ai fait une enquête. Si j'avais une page jsp simple (pas de mosaïque) la mise en mémoire tampon (avec l'attribut buffer), si j'avais mon Thread.sleep() là toute la page restituée après deux secondes si la taille de la page était inférieure à la taille de la mémoire tampon . Mais si j'ai utilisé des tuiles dans la page (comme dans l'exemple ci-dessus) je n'ai pas pu obtenir la page en même temps (j'ai même inclus la directive page dans tous mes tiles-templates/"components", pas d'aide) . Donc les carreaux ont probablement la couleur quelque part?

En outre, les "carreaux problématiques" étaient ma partie du corps, qui contenait une étiquette de forme:. Je l'ai remplacé par une forme normale étiquette et cela a fonctionné comme je voulais ...

MISE À JOUR 3

Ok, personne ne semble connaître le fonctionnement interne des carreaux ou entretoises étiquettes ... Pas grand problème C'est un cas et une exigence très spécifiques. J'ai travaillé autour d'elle en utilisant apache comme un proxt devant l'application, et en utilisant les options de configuration de proxy d'apache pour spécifier un grand tampon. Je vais marquer cela comme une réponse.

+0

Je marquer vos réponses utiles mais Je n'ai pas assez de réputation, désolé :( – Frontline

Répondre

0

Pouvez-vous utiliser l'attribut "flush" sur les composants de tuiles?

<tiles:insertAttribute name="body" flush="false"/> 

De plus, si le tampon de sortie devient trop gros, il va tout de même rincer. Essayez d'augmenter la taille de la mémoire tampon?

<%@ page language="java" buffer="500kb" autoFlush="false" %> 
+0

Oui, j'ai essayé aussi, pas de différence :( – Frontline

+1

Hélas. Pouvez-vous remplacer IE sur votre ordinateur de patrons avec Firefox à thème comme IE? – JeeBee

1

Vous pouvez envoyer des données de page à la fois à la fin du serveur si vous le souhaitez (et de nombreux cadres faire de toute façon pour des raisons pratiques), mais la réalité de la mise en réseau est que ce ne sera pas tous arriver à la fois et le navigateur le rendra au fur et à mesure que les paquets arrivent. Et c'est une bonne chose pour la réactivité, même si vous * esthétiquement voudriez que la page affiche tout à la fois.

Vous pouvez réduire le décalage autant que possible en simplifiant le balisage et en utilisant la compression par dégonflement pour réduire la taille de la charge utile, et c'est une chose intéressante à faire en général. De plus, vous pouvez vous assurer que vous ne frappez pas un contenu Flash non formaté. Mais vous ne pouvez pas contrôler quand le navigateur choisit de rendre, à moins de tout faire en JavaScript avec tous les inconvénients que cela implique (et même alors, le navigateur pourrait redessiner lentement).

(* -. Ou votre client/patron, si c'est qui est venu avec cette « exigence importante » que votre site fonctionne en quelque sorte différemment à toutes les autres pages sur le web)