我知道java中有一个三元表达式。就是那个 (表达式1)?(表达式2):(表达式3)的这个。
问题是:
不知道能不能在EL表达式中写三元表达式.
${(表达式1)?(表达式2):(表达式3)} 这么写可以么?

解决方案 »

  1.   

    不能这样写,不过你可以搞个自定义函数,把参数都传到函数中去再返回结果就行了
    function.java
    package com.lhcard.common;/**
     * 定义EL自定义函数
     * 
     * @author:陈伟
     * @date:2008-5-15
     * 
     */
    public class function { /**
     * 获取一个字符串的长度
     * 
     * @author 陈伟
     * @date 2008-5-15
     * @param str
     * @return int
     */
    public static int getLen(String str) {
    return str.length();
    } /**
     * 截取字符串
     * 
     * @author 陈伟
     * @date 2008-5-15
     * @param str
     * @param start
     * @param end
     * @return  String
     */
    public static String substr(String str, int start, int end) {
    return str.substring(start, end);
    } /**
     * 两数相除获取整数结果
     * 
     * @author 陈伟
     * @date 2008-5-15
     * @param first
     * @param second
     * @return int
     */
    public static int chufa(int first, int second) {
    return first / second;
    }
    }mytag.tld
    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>len</short-name>
    <function>
    <description>calculate string length</description><!-- 对这个EL方法的描述  -->
    <name>getLen</name><!-- 调用EL方法的名称 -->
    <function-class>com.lhcard.common.function</function-class>
    <function-signature>
    int getLen(java.lang.String)
    </function-signature>
    <example>${len:getLen(str)}</example><!-- 例如 -->
    </function> <function>
    <description>substring</description>
    <name>substr</name>
    <function-class>com.lhcard.common.function</function-class>
    <function-signature>
    java.lang.String substr(java.lang.String,int,int)
    </function-signature>
    </function> <function>
    <description>chufa</description>
    <name>chufa</name>
    <function-class>com.lhcard.common.function</function-class>
    <function-signature>int chufa(int,int)</function-signature>
    </function>
    </taglib>test.jsp
    <%@ page language="java"  pageEncoding="gbk"%>
    <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
    <%@ taglib uri="/WEB-INF/mytag.tld" prefix="len"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
    <c:set value="111111111111111111111111" var="str"></c:set>
    <c:if test="${len:getLen(str)>10}">
    <c:out value="${len:substr(str,0,5)}"></c:out>
    </c:if>
    ${len:chufa(5,3) }
    </body>
    </html>
      

  2.   

    试了下,可以啊
    看来不能想当然
    <%@ page language="java"  pageEncoding="gbk"%>
    <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
    <c:set var="a" value="5"></c:set>
    <c:set var="b" value="4"></c:set>
    ${a>b?"a":"bb" }
    ${5>4?"a":"b" }
    </body>
    </html>
      

  3.   

    EL表达式好像不支持运算吧!换成scriplet<%%>试一下嘛
      

  4.   

    可以 用 三元表达试 . 
    参看 http://blog.csdn.net/caoyinghui1986/archive/2008/04/02/2243470.aspx
    3楼的测试也是对的。