2011-01-07 4 views
5

J'ai besoin d'afficher des caractères simples incrémentés pour indiquer des notes de bas de page dans une table de données dans une JSP. En Java, j'ai normalement une variable char et je l'incrémente simplement, ou convertis un int en un char en le transposant (par exemple (char) (i + 97) pour convertir un index 0 en a-z). Je ne peux pas comprendre comment faire cela dans le langage d'expression à court d'écrire ma propre fonction JSTL.Comment convertir int en char dans le langage d'expression JSP?

Est-ce que quelqu'un sait comment convertir un int en char en EL? Ou comment incrémenter une variable char en EL? Ou peut-être même une meilleure technique pour faire ce que je suis en train de faire en JSP/EL?

Exemple de ce que je dois être en mesure de produire:
un mydata
b myotherdata
...
une première note
b deuxième note en bas

Répondre

6

Ce n'est pas possible. Votre meilleur pari est de l'afficher en tant qu'entité XML.

<c:forEach items="${list}" var="item" varStatus="loop"> 
    <sup>&#${loop.index + 97};</sup> ${item}<br /> 
</c:forEach> 

Il va finir comme comme

<sup>&#97;</sup> item1<br /> 
<sup>&#98;</sup> item2<br /> 
<sup>&#99;</sup> item3<br /> 
... 

Le &#x61; représente un a et ainsi de suite.

a Item1
b item2
c item3
...

Vous avez seulement un problème lorsque la liste est plus de 26 articles.

+0

Merci c'est une bonne solution mais a est la représentation hexagonale d'un « a » et donc ce didn pas tout à fait le travail (a sauté les 10e à 16e lettres quand il est arrivé à p). La solution était d'utiliser a etc qui est l'équivalent décimal. –

+0

Oh, c'était stupide de ma part. Fixé. – BalusC

1

Vous pouvez utiliser c: définir et des balises d'entité xml pour convertir l'entier en caractère. Vous devrez utiliser la barre oblique inverse afin d'échapper à la # ou, la variable identifiant sera mis à la lettre &#{(i.index+97)} plutôt que d'évaluer le code ${...}

L'exemple suivant boucle à travers les variables « liste » et la sortie d'un div pour chacun avec l'identifiant et le contenu commençant à "a".

<c:forEach items="${list}" varStatus="i"> 
    <c:set var="id" value="&\#${(i.index+97)}" /> 
    <div id="div-${id}">Div ${id}</div> 
</c:forEach> 

Ceci produirait ce qui suit, en supposant qu'il y a 5 éléments dans la collection "list".

<div id="div-a">Div a</div> 
<div id="div-b">Div b</div> 
<div id="div-c">Div c</div> 
<div id="div-d">Div d</div> 
<div id="div-e">Div e</div> 

Comme il est indiqué dans l'autre réponse, cela ne fonctionnera que si la taille de votre liste est en 27.