How to get a random number in JSTL?

2019-03-10 02:02发布

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>

标签: jsp jstl el
4条回答
欢心
2楼-- · 2019-03-10 02:31

Hope it helps! random taglib

Also you may try $Math.random function.

查看更多
仙女界的扛把子
3楼-- · 2019-03-10 02:33

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楼-- · 2019-03-10 02:40

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).

查看更多
做自己的国王
5楼-- · 2019-03-10 02:45

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.

查看更多
登录 后发表回答