如何在JSTL中获取随机数?

Ser*_*Amo 12 jsp jstl el

我想得到类似JSTL中生成的下一个代码

<c:choose>
    <c:when test="${random number is even}">
        <div class="redlogo">
    </c:when>
    <c:otherwise>
        <div class="greenlogo">
    </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

Ric*_*mon 16

这个有点难看,但它有效......

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

之后您可以检查${rand mod 2 == 0}${rand mod 2 == 1}获得所需的输出.


Bal*_*usC 12

你可以java.util.Random用bean 包装并使用它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();
    }
}
Run Code Online (Sandbox Code Playgroud)

...以便您可以在JSP中使用它,如下所示:

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

...

<div class="${random.nextInt % 2 == 0 ? 'redlogo' : 'greenlogo'}">
Run Code Online (Sandbox Code Playgroud)

(请注意,我c:choose在三元运算符的帮助下对其进行了优化).


bet*_*r07 10

我只想指出,如果你使用EL 2.2(或更高版本),你可以直接调用EL中的任何方法(参见这个问题),所以最快的方法可能是初始化bean

<jsp:useBean id="random" class="java.util.Random" scope="application" />
Run Code Online (Sandbox Code Playgroud)

然后nextInt()从页面内的java.util.Random直接调用或任何其他方法:

${random.nextInt()}
Run Code Online (Sandbox Code Playgroud)

或带参数:

${random.nextInt(10)}
Run Code Online (Sandbox Code Playgroud)

  • 不,它不会,因为你将用括号或括号中的参数调用它.阅读[EL维基页面]中的**调用非getter方法**部分(http://stackoverflow.com/tags/el/info) (2认同)