How to get a random number in JSTL?

2019-03-10 01:58发布

问题:

I would like to get something like the next code generated in JSTL

<c:choose>
    <c:when test="${random number is even}">
        <div class="redlogo">
    </c:when>
    <c:otherwise>
        <div class="greenlogo">
    </c:otherwise>
</c:choose>

回答1:

This one is a bit ugly but it works...

<c:set var="rand"><%= java.lang.Math.round(java.lang.Math.random() * 2) %></c:set>

Later you can check for ${rand mod 2 == 0} and ${rand mod 2 == 1} to get your desired output.



回答2:

You could wrap java.util.Random in a bean and make use of jsp:useBean.

package com.example;

import java.util.Random;

public class RandomBean {
    private static final Random RANDOM = new Random();

    public int getNextInt() {
        return RANDOM.nextInt();
    }
}

...so that you can use it in your JSP as follows:

<jsp:useBean id="random" class="com.example.RandomBean" scope="application" />

...

<div class="${random.nextInt % 2 == 0 ? 'redlogo' : 'greenlogo'}">

(note that I optimized the c:choose away with help of the ternary operator).



回答3:

I just want to point out, that if you are using EL 2.2 (or above), you can directly call any method in EL (see this question), so probably the quickest method is to initialize a bean

<jsp:useBean id="random" class="java.util.Random" scope="application" />

and then directly invoke nextInt() or any other method from java.util.Random inside page:

${random.nextInt()}

or with parameter:

${random.nextInt(10)}


回答4:

Hope it helps! random taglib

Also you may try $Math.random function.



标签: jsp jstl el