2010-09-12 4 views
2

J'ai envisagé une gamme d'options pour quitter la forme à l'aide de scriptlets dans mes JSP. La principale cause de «désordre» a tendance à être les problèmes d'impression de ArrayList et d'autres objets Collections, car certains balisages liés à la présentation sont mélangés avec du Java.Comment faire pour imprimer des objets collections propres dans un JSP

Que recommanderiez-vous comme la meilleure solution pour faire face à ce genre de situation? Je regarde Wicket (très brièvement), mais je ne sais pas si cela aidera à nettoyer cette situation.

+2

En relation: [Comment éviter le code Java dans les fichiers JSP] (http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files). – BalusC

+1

La seule alternative à JSTL est un framework MVC qui offre des taglibs pour contrôler le flot dans la vue comme JSF, Struts, Spring-MVC, Wicket, etc. C'est juste une autre courbe d'apprentissage au dessus de JSP/JSTL. – BalusC

+0

ou vous pouvez abandonner JSP tout à fait et utiliser quelque chose comme Velocity –

Répondre

5

Si vous utilisez JSP simple, sans aucun autre framework Web sur le dessus, je vous suggère de jeter un oeil à la JSTL. Il vous donne beaucoup de tags pour manipuler vos objets.

Une étiquette qui pourrait vous intéresser dans votre cas est la balise <c:forEach />. Il vous permet d'utiliser chaque boucle dans vos pages JSP.

Pour plus d'informations, voici quelques liens:

+0

Merci, je connaissais JSTL mais j'avais lu quelques messages, etc., qui suggéraient que les gens ne les utilisaient pas. Comme il est si bien supporté, c'est peut-être le point de départ, et si j'ai besoin de quelque chose de plus, je peux regarder des choses comme Wicket plus en détail. – Ankur

3

JSTL a:

<c:forEach items="${list}" var="item"> 
    ${item} 
</c:forEach> 

Vous devez simplement mettre la liste comme un attribut de requête nommé list. Jetez un oeil aux autres balises JSTL afin de vous débarrasser des scriptlets.

1

Je crois que presque toutes les API Web de haut niveau ont quelque chose pour vous aider dans ce sens.

Pour Wicket, je trouve Repeaters:

redoublants sont des éléments qui peuvent rendre leur marquage corporel à plusieurs reprises. Ces composants sont utiles pour créer une sortie qui est traditionnellement créée via des boucles.

L'utilisation d'un ListView, par exemple, vous pouvez do this:

code:

List list = Arrays.asList(new String[] { "a", "b", "c" }); 
ListView listview = new ListView("listview", list) { 
    protected void populateItem(ListItem item) { 
     item.add(new Label("label", item.getModel())); 
    } 
}; 

Markup:

<span wicket:id="listview"> 
    this label is: <span wicket:id="label">label</span><br/> 
</span> 

aura-t-les résultats suivants rendus au navigateur:

<span wicket:id="listview"> 
    this label is: <span wicket:id="label">a</span><br/> 
</span><span wicket:id="listview"> 
    this label is: <span wicket:id="label">b</span><br/> 
</span><span wicket:id="listview"> 
    this label is: <span wicket:id="label">c</span><br/> 
</span> 

Il existe également des exemples plus avancés sur cette page.

Pour, par exemple, JSF, il y a:

  • <ui:repeat>, qui est similaire à forEach de JSTL que d'autres affiches ont fait remarquer.
  • <ui:dataTable>, qui semblable à ListView Wicket

Hope that helps!

+0

Merci, cela semble très bien. – Ankur

0

Si votre balisage et logique s'empêtré, vous mieux les séparer par un MVC-modèle (Model-View-Controller).

Voir ici: http://en.wikipedia.org/wiki/Model -View-Controller # Java: _Java_Platform.2C_Enterprise_Edition_.28Java_EE.29; ou ici: http://www.oracle.com/technetwork/java/javaee/overview/index.html

+0

Je ne dirais pas que ma logique commerciale est enchevêtrée. Tout cela est en toute sécurité éliminé. Mais la logique d'affichage a tendance à être une combinaison de Java et HTML. – Ankur

+0

Très bien, j'ai mal compris votre question alors. Un modèle MVC supprimerait cependant la juxtaposition quelque peu désordonnée de balises HTML et JSP/JSLT. Vous utiliseriez 'Servlet's pour imprimer du contenu HTML en utilisant la méthode' Request # getWriter'. Il réalise essentiellement la même chose mais sera plus modulaire et donc plus facile à écrire et à déboguer. – FK82

Questions connexes