2011-09-27 2 views
2

J'ai une JSP qui compose une liste d'objets, puis rend des fragments JSP en fonction de la classe de chacun des objets de la liste. À l'heure actuelle, cela se fait avec une grande chaîne de si les déclarations à l'intérieur du « parent » JSP:Comment écrire une JSP qui rend une liste de fragments JSP, sans code de commutation IF

if(bean.getFilterChildByType(Level.class) != null) 
    { 
    %> <jsp:include page="filters/level.jsp"/> <% 
    } 
    if(bean.getFilterChildByType(Sources.class) != null) 
    { 
    %> <jsp:include page="filters/sources.jsp"/> <% 
    } 
    ... 

Alors, ma question est, en JSP (Tomcat) est-il possible d'obtenir cette même fonctionnalité sans si chaîne, juste en itérant les objets dans la liste et peut-être profiter de la convention de nommage "Nom de la classe" .jsp? Je l'ai joué avec:

<%@ include file="filename" %> 

mais cela ne semble pas permettre à des variables dans le nom de fichier soit.

+1

Etes-vous en train d'accéder au jsp 'principal' directement via URL ou êtes-vous en train de transférer/inclure via une servlet? – claymore1977

+0

accéder directement – Black

Répondre

2

Quelque chose comme cela devrait fonctionner

<jsp:include page="filters/<%=filename%>.jsp"/> 
+0

javax.servlet.ServletException: Fichier "/ access/filters/<%=filename%> .jsp" pas trouvé – Black

+0

J'ai trouvé pourquoi cela ne fonctionnait pas! "Selon le JSP include sytanx, vous pouvez utiliser le nom de fichier include entre guillemets directement ou vous pouvez le donner en tant que variable dans les balises scriptlet mais pas comme une combinaison des deux." Donc, je devais faire: où filename = 'filters/myfile.jsp' – Black

0

résoudre le jsp approprié à inclure (basé sur bean.getFilterChildByType) du côté du contrôleur, puis il suffit de passer le nom du jsp au récipient jsp. Maintenant, cela peut être facilement inclus.

+0

veuillez expliquer comment le paramètre passé peut être utilisé pour inclure un JSP – Black

+0

passer le nom jsp à inclure en tant que un paramètre de requête – Nrj

0

Ceci est difficile! Si les fichiers jsp inclus (level.jsp, source.jsp, etc) ne sont pas trop complexes, pourquoi ne pas déplacer le HTML de ces fichiers vers un appel de fonction des objets que vous appelez bean.getFilterChildByType (.. .) sur?

De cette façon, au lieu d'un grand if/else arbre, alors vous pouvez simplement appeler:

String html = bean.getHtmlForType(); 

... serait probablement travailler aussi sur beaucoup plus propre dans une boucle.

+0

habituellement, garder l'état d'affichage du côté java est une mauvaise idée – Nrj

+0

Cependant, la manière dont l'auteur semble utiliser les JSP montre que les JSP sont directement liées à un type d'objet. On pourrait alors affirmer que la JSP représente une partie de l'état de l'objet. C'est la seule raison pour laquelle je mentionnerais même avoir Java générer du HTML. Normalement, je suis là avec vous en gardant le modèle et la vue séparés. – claymore1977

+0

désolé, ce n'est pas une solution acceptable – Black

Questions connexes