2010-02-16 44 views
12

Tôi muốn để có được một cái gì đó giống như các mã tiếp theo được tạo ra trong JSTLCách lấy số ngẫu nhiên trong JSTL?

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

Trả lời

15

một Đây là một chút xấu xí nhưng nó hoạt động ...

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

Sau đó bạn có thể kiểm tra ${rand mod 2 == 0}${rand mod 2 == 1} để có được kết quả mong muốn của bạn.

3

Hy vọng nó sẽ giúp! random taglib

Ngoài ra, bạn có thể thử chức năng $ Math.random.

12

Bạn có thể quấn java.util.Random vào hạt và sử dụng 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(); 
    } 
} 

... để bạn có thể sử dụng nó trong JSP của bạn như sau:

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

... 

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

(lưu ý rằng tôi tối ưu hóa các c:choose đi với sự giúp đỡ của các nhà điều hành ternary).

+1

Nếu luôn có hai giá trị, tôi sẽ chuyển sang bước tiếp theoBoolean;) – Photodeus

+0

chỉ là một lưu ý - nếu EL hỗ trợ các phương thức gọi, bạn có thể bỏ qua bean và sử dụng '$ {random.nextInt(). ..} '(+1 đã được đưa ra từ lâu :)) – Bozho

+0

@Bozho thử bạn có thể hiểu. Nó cần getter và setter – arvindwill

10

Tôi chỉ muốn chỉ ra, rằng nếu bạn đang sử dụng EL 2.2 (hoặc cao hơn), bạn có thể trực tiếp gọi bất kỳ phương pháp trong EL (see this question), do đó có lẽ là phương pháp nhanh nhất là để khởi tạo một bean

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

và sau đó trực tiếp gọi nextInt() hoặc bất kỳ phương pháp nào khác từ java.util.Random bên page:

${random.nextInt()} 

hoặc với tham số:

${random.nextInt(10)} 
+0

EL sẽ cho rằng java.util.Random có ​​phương thức getNextInt(). Mà nó không có. –

+2

không, nó sẽ không, bởi vì bạn sẽ gọi nó với dấu ngoặc hoặc với các đối số trong dấu ngoặc vuông. Đọc ** Gọi các phương thức phi getter ** trong [trang wiki của EL] (http://stackoverflow.com/tags/el/info) – betatester07

+0

Aha, đúng vậy! Công cụ mới tuyệt vời trong EL! Cảm ơn con trỏ! –