Création de tableau en utilisant JSTL ou EL

je travaille sur une application web utilisant Java et ses cadres(printemps 3.1.1). Et j'essaie d'éviter d'utiliser les scriptlets autant que possible, mais je ne trouve pas d'autre moyen que celui-ci pour définir un tableau:

<%
    String[] alphabet = {"A", "B", "C", ... , "Z"};
    pageContext.setAttribute("alphabet", alphabet);      
%> 

après avoir défini l'attribut pageContext, je peux l'utiliser avec ${alphabet}. Mais je veux savoir, est-il possible d'utiliser JSTL/EL pour créer un tableau?

mise à jour: j'utilise ce tableau pour créer des liens. Par exemple, si l'utilisateur clique sur "S", un liste des employés dont le prénom commence par " S " vient. Donc, au lieu de créer des liens Un par un, je répète ${alphabet}.

19
demandé sur Alpha Carinae 2013-01-22 12:58:50

6 réponses

si vous êtes déjà sur EL 3.0 (Tomcat 8+, WildFly 8+, GlassFish 4+, Payara 4+, TomEE 7+, etc), qui supporte nouveau opérations sur les objets de collection, vous pouvez utiliser ${[...]} syntaxe pour construire une liste, et ${{...}} syntaxe pour construire un ensemble.

<c:set var="alphabet" value="${['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']}" scope="application" />

si vous n'êtes pas encore sous EL 3.0, utilisez le ${fn:split()} fonction astuce sur une chaîne simple qui sépare les caractères individuels par un séparateur commun, tel que la virgule.

<c:set var="alphabet" value="${fn:split('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z', ',')}" scope="application" />

je suis toutefois d'accord que tu ferais mieux d'utiliser le code Java normal pour ça. Étant donné qu'il s'agit apparemment de données statiques, il suffit de créer cette classe d'auditeur:

@WebListener
public class ApplicationData implements ServletContextListener {

    private static final String[] ALPHABET = { "A", "B", "C", ..., "Z" };

    @Override
    public void contextInitialized(ServletContextEvent event) {
        event.getServletContext().setAttribute("alphabet", ALPHABET);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // NOOP.
    }

}

il s'auto-enregistrera de manière transparente sur le démarrage de webapp et mettra les données désirées dans la portée de l'application.

40
répondu BalusC 2017-08-24 03:26:39

si vous voulez itérer plus de tokens dans string alors utilisez simplement forTokens:

<c:set var="alphabet">A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z</c:set>

<c:forTokens items="${alphabet}" delims="," var="letter">
    ${letter}
</c:forTokens>
21
répondu Andrii Nemchenko 2013-08-12 10:32:13

Si vous utilisez Java EE 7 / Langage d'Expression 3.0, vous pouvez créer un List littérale

<c:set var="alphabet" value="${['A', 'B', 'C', ... , 'Z']}" />

qui peut parcourir un peu comme un Array.

4
répondu mxk 2014-12-29 01:53:58

les JSP ne sont pas destinés à ce genre de choses. Ils sont destinés à consommer, pas à créer. Si vous souhaitez créer un tableau, alors vous avez probablement besoin d'un Servlet ici.

ajouter la logique de création de tableau( ou encore mieux, la création de liste), dans un Servlet, et l'utiliser pour pré-processus la demande à votre page JSP. Et puis, vous pouvez utiliser le List attribut servlet dans votre JSP page.

3
répondu Rohit Jain 2013-01-22 09:23:12

pas pure EL, mais une solution assez propre néanmoins:

<c:set var="alphabet" value='<%=new String[]{"A", "B"} %>'/>
2
répondu wvdz 2015-03-27 09:03:36

sans savoir laquelle cadre utilisez - vous, la meilleure approche pour travailler avec JSPs sans utiliser is scriptlets est de sauvegarder chaque JSP (view) avec un Java bean (un objet):

Sauvegarde de haricot:

public class MyBackingBean {

   private List<String> alphabet;

   public List<String> getAlphabet() {
      if (alphabet == null) {
         // Using lazy initialization here, this could be replaced by a
         // database lookup or anything similar
         alphabet= Arrays.asList(new String[]{ "A", "B", "C", ... });
      }
      return alphabet;
   }

}

puis instanciez la fève au JSP de cette façon:

<jsp:useBean id="backingBean" scope="page" class="com.example.MyBackingBean" />

Après cela, vous pouvez utiliser le EL ${backingBean.alphabet} pour accéder à cette liste.

Remarque:: si vous avez besoin d'un traitement plus complexe, alors vous devrez utiliser Servlets ou l'une des fonctionnalités fournies par un framework.

0
répondu Alonso Dominguez 2013-01-22 11:47:35