JSTL表达式

JSTL

JSP页面要用到核心标签,必须使用以下指令:

<%@taglib uri="http://java.sun.com/jsp/jstl

/core" prefix="c" %>

变量标记   

<c:set> :操作提供基于标记的机制来创建和设置限制了作用域的变量。

语法一:value的值储存至范围为scopevarName变量之中

<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>

属性:

1  var 属性指定了限制了作用域的变量的名称

2  scope 属性表明了该变量驻留在哪个作用域中可选的,其缺省值是 page

2  value 属性指定了分配给该变量的值

如果指定变量已经存在,则简单地将所指明的值赋给它。如果不存在,则创建新的限制了作用域的变量,并用该值初始化这个变量。

看下面使用<c:set> 的两个示例。

<c:set var="timezone" scope="session" value="CST"/>

将会话作用域变量设置成 String 值。

<c:set var="square" value="${param['x'] * param['x']}"/>

用表达式来设置数值:将页面作用域内名为 square 的变量赋值为名为 x 的请求参数的值的平方。

语法二:将本体内容的数据储存至范围scopevarName变量之中

<c:set var="varName" [scope="{ page|request|session|application }"]>
… 本体内容
</c:set>

<c:set> 主体内生成的所有内容都将作为一个 String 值赋给指定变量。

语法三:value的值储存至target对象的属性中

c:set value="value" target="target" property="propertyName" />

语法四:将本体内容的数据储存至target对象的属性中

<c:set target="target" property="propertyName">
… 本体内容
</c:set>

名  称

value

var

scope

target

property

说  明

要被储存的值

欲存入的变量名称

var变量的JSP范围

为一JavaBeanjava.util.Map对象

指定target对象的属性

E L

Y

N

N

Y

Y

  

Object

String

String

Object

String

  

默认值

page

注意:

一 <c:set>标签有两种不同的属性设置:vartarget
         var“版本用于设置作用域属性,target“版本用于设置bean属性或Map值。

★ var“版本
    1 <c:set var="userLevel" scope="session" value="Cowboy"/>  
    2 <c:set var="fido" value="${person.dog}"/>  
 3 <c:set var="user" scope="session">  
      Sheriff, Bartender, Cowgirl   
      </c:set>  
如果“value”null“var”指定的属性将被删除!
如果“var”指定的属性不存在,则会创建一个属性,但仅当“value”不为null时才会创建新属性。

★ target“版本

   1.  <c:set target="${petMap}" property="dogName" value="Clover"  scope="session"/>    
   2.  <c:set target="${person}" property="name">  
       ${foo.name}   
   </c:set>  
如果“target”是一个Map“property”指定的是该Map的一个键;如果“target”是一个bean“property”指定的是该bean的一个成员字段。
如果“target”表达式为null,容器会抛出一个异常。
如果“target”表达式不是一个Mapbean,容器会抛出一个异常。
如果“target”表达式是一个bean,但是这个bean没有与“property”匹配的成员字段,容器会抛出一个异常。

 定义变量的使用范围:

  <c:set var="varName" [scope="{ page|request|session|application }"]>  

默认的是:page 范围 scope” 是可选的,如果没有使用这个属性,则默认为页面作用域。具体的,当没有使用这个属性时,容器会依次在页面作用域、请求作用域、会话作用域、应用作用域查 找,如果找不到var指定名字的作用域属性,容器就会在页面作用域新建一个属性;如果找不到target指定的对象,容器会抛出一个异常。

 <c:set var="para" value="${41+1}" scope="session"  />
     <c:out value="${sessionScope.para}" />

<c:remove>是用来删除限制了作用域的变量的。删除数据。

语法:没有本体(body)内容

<c:remove var="varName" [scope="{ page|request|session|application }"] />

<c:remove var="timezone" scope="session"/>

属性:

1var 属性指定待删除变量的名称

2scope 属性是可选的,它表示待删除变量来自哪个作用域,缺省为 page

名 称

var

scope

说 明

欲移除的变量名称

var变量的JSP范围

EL

N

N

类型

String

String

必须

 是

否 

默认值

page

输出

<c:out>显示表达式的值,而不存储它。类似<%=  %>

语法一:没有本体(body)内容

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

该标记对由其 value 属性指定的表达式进行求值,在对 value 属性的表达式求值所得结    果为 null 或空 String 的情况下,<c:out> 将打印其值。 

如果value值为null,则显示default的值;没指定default,则输出空字符串。

语法一:有本体(body)内容

<c:out value="value" [escapeXml="{true|false}"]>   default value   </c:out> 

名 称 

value

default

escapeXml 

说 明

需要显示出来的值  

如果value的值为null,则显示default的值

是否转换特殊字符,如:转换成 

E L

Y

Y

类 型

Object

Object

boolean 

必 须

是 

否 

默认值

无 

true 

escapeXml 属性也是可选的。它控制当用 <c:out> 标记输出诸如“<”“>”“&”之类的字符(在 HTML 和 XML 中具有特殊意义)时是否应该进行转义。如果将 escapeXml 设置为 true,则会自动将这些字符转换成相应的 XML 实体(此处提到的字符分别转换成 <、> 和 &)。

例如,假定有一个名为 user 的会话作用域变量,它是一个类的实例,该类为用户定义了两个特性:username 和 company。每当用户访问站点时,这个对象被自动分配给会话,但直到用户实际登录后,才会设置这两个特性。假定是这种方案,在用户登录之后,这个片段将显示单词“Hello”,其后是他/她的用户名和一个惊叹号。但是,在用户登录之前,由这个片段生成的内容则是短语“Hello Guest!”。在这种情况下,因为 username 特性还有待初始化,所以 <c:out> 标记将转而打印出 default 属性的值(即字符串“Guest”)。

Hello <c:out value="${user.username}" default="Guest"/>!

登陆之前:Hello Guest!

登陆之后:Hello ${user.username}!

<c:if>执行流程控制,就和我们一般在程序中用的if一样

语法一:没有本体(body)内容

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>

语法二:有本体(body)内容

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]> 本体内容

</c:if>

如果表达式的结果为true,则执行本体内容,false则相反

注意:

<c:if> 标签必须要有 test 属性,当 test 中的表达式结果为 true 时,则会执行本体内容;如果为false,则不会执行。如果指定了scope属性,则必须指定var属性。

<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签

语法:有本体(body)内容

<c:choose>   本体内容( <when> 和 <otherwise> )   </c:choose> 

限制:

除了空白字符外,<c:choose>的标签体只能包含这两个标签。

<c:choose>的本体内容只能有

a.  空白       b.  1或多个 <c:when>      c .  0或多个 <c:otherwise> 

说明:

1 运行时,判断<c:when>标签的测试条件是否为true,第一个测试条件为true<c:when>标签的标签体将被JSP容器执行。如果没有满足条件的<c:when>标签,那么,<c:otherwise>的标签体将被执行。

2 若使用<c:when><c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签

<c:when>作为<c:choose>的子标签,表示一个可选的条件

语法:有本体(body)内容

<c:when test="testCondition" >   本体内容   </c:when>

名 称

说 明

EL

类型

必须 

默认值 

test 

如果表达式的结果为true,则执行本体内容,false则相反

Y

boolean

约束:

<c:when>必须有一个直接的父标签<c:choose>,而且必须在同一个父标签下的<c:otherwise>标签之前出现

说明:

运行时,判断<c:when>标签的测试条件是否为true,第一个测试条件为true<c:when>标签的标签体被JSP容器执行

<c:otherwise>作为<c:choose>的子标签,表示最后的选择,在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行 <c:otherwise> 的本体内容。

     

语法:有本体(body)内容

<c:otherwise>   本体内容   </c:otherwise>

属性:无

限制:<c:otherwise> 必须在 <c:choose> 和 </c:choose>之间   ·在同一个 <c:choose> 中时,<c:otherwise> 必须为最后一个标签

说明在同一个 <c:choose> 中,假若所有 <c:when> test属性都不为true时,则执行 <c:otherwise> 的本体内容。

<c:choose>

<c:when test="${condition1}">     condition1true       </c:when>

<c:when test="${condition2}">   condition2true  </c:when>   <c:otherwise>   condition1condition2都为false   </c:otherwise>   </c:choose> 

范例说明:

condition1true时,会显示condition1true;当condition1falsecondition2true时,会显示condition2true,如果两者都为false,则会显示condition1condition2都为false。   注意   假若condition1condition2两者都为true时,此时只会显示"condition1true",这是因为在同一个<c:choose>下,当有好几个<c:when>都符合条件时,只能有一个<c:when>成立。

<c:forEach>为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容

                  

语法一:迭代一集合对象之所有成员

<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]   [begin="begin"] [end="end"] [step="step"]> 

</c:forEach>

    

 语法二:迭代指定的次数

<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>

</c:forEach> 

                                        

名 称

说 明

EL 

类型

必须

默认值

var

用来存放现在指到的成员

N

String

items

被迭代的集合对象

Arrays Collection

Iterator

EnumerationMap  String

否 

varStatus

用来存放现在指到的相关成员信息 

String

begin

开始的位置

Y

int

end

结束的位置

Y

int

最后一个成员

step

每次迭代的间隔数

int

否 

1

                                                                                                 限制 :

 ·假若有begin属性时,begin必须大于等于   

·假若有end属性时,必须大于等于begin   

·假若有step属性时,step必须大于等于  Null 和 错误处理   

·假若itemsnull时,则表示为一空的集合对象   

·假若begin大于或等于items时,则迭代不运算  

 

说明   如果要循序浏览一个集合对象,并将它的内容显示出来,就必须有items属性。

注意

varName的范围只存在<c:forEach>的本体中,如果超出了本体,则不能再取得varName的值。上个例子中,若${item} 是在</c:forEach>之后执行时,如:   <c:forEach items="${atts}" var="item" >   </c:forEach>   ${item}</br>   ${item}则不会显示item的内容。   

<c:forEach>除了支持数组之外,还有标准J2SE的集合类型,例如:ArrayListListLinkedListVectorStackSet 等等;另外还包括java.util.Map类的对象,例如:HashMapHashtablePropertiesProviderAttributes。   

<c:forEach>还有beginendstep这三种属性:begin主要用来设定在集合对象中开始的位置(注意:第一个位置为0)end用来设定结束的位置;而step则是用来设定现在指到的成员和下一个将被指到成员之间的间隔。我们将之前的范例改成如下:   

   <c:forEach>中指定的集合对象atts将会从第2个成员开始到第5个成员,并且每执行一次循环都会间隔一个成员浏览。因此结果是只显示atts[1]atts[3]的内容

JSTL之数字、日期格式化---<fmt:formatNumber/><fmt:formatDate/>

日期表示 

<fmt:formatDate value="${DATE1}"    pattern="yyyy-MM-dd hh:mm:ss" type="date" dateStyle="long" /> 

百分数,千分数表示

<fmt:formatNumber    value="${DoubleVALUE}"   type="number" pattern="0.00" />    0.01 <fmt:formatNumber    value="${DoubleVALUE}"   type="number" pattern="0.00%" />    0.20 %

其他数字表示

fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/> -- 123,456.79

<fmt:formatNumber value="123456.7" pattern="#,#00.0#"/> -- 123,456.7

<fmt:formatNumber value="123456.7" pattern="#,#00.00#"/> -- 123,456.70

<fmt:formatNumber value="12" type="percent" /> -- 1,200%type 可以是currency、 number、 和percent

货币表示
===1
<fmt:setLocale value="ch_CH" />
<fmt:formatNumber value="${data}" type="currency" />
==2
<fmt:formatNumber value="${doubleValue}" type="number" pattern="0.00" />


参考 ==============================================================================

java格式化输出:
DecimalFormat df = new DecimalFormat("格式");
String fmt =df.format(double);
符号                  意义
0                     一个数位
#                     一个数位,前导零和追尾零不显示
.                      小数点分割位置
,                     组分隔符的位置
-                      负数前缀
%                    100乘,并显示百分号
其他任何符号    在输出字符串中包括指定符号

JSP 国际化-格式化货币和日期

1.格式化货币

世界上许多国家都有不同的货币格式和数字格式惯例。针对特定的本地化环境正确地格式化和显示货币是本地化的一个重要部分。

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>

<title>Currency Formatting</title>
</head>
<body>
<h1>Currency Formatting and locales</h1>

<h3>English, Great Britain</h3>
<fmt:setLocale value="en_GB" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>English, USA</h3>
<fmt:setLocale value="en_US" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>French, France</h3>
<fmt:setLocale value="fr_FR" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>Japanese, Japan</h3>
<fmt:setLocale value="ja_JP" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>Korean, Korea</h3>
<fmt:setLocale value="ko_KR" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>Spanish, Spain</h3>
<fmt:setLocale value="es_ES" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>Arabic, Egypt</h3>
<fmt:setLocale value="ar_EG" />
<fmt:formatNumber type="currency" value="80000" /><br/>

<h3>Using Local Numeric Formatting for Different Currency</h3>
<h4>English, Great Britan</h4>
<fmt:setLocale value="en_GB" />
<fmt:formatNumber type="currency" value="80000" /><br/>
<fmt:formatNumber type="currency" value="80000" currencyCode="EUR"/><br/>

</body>
</html>

2.格式化日期

类似于数字和货币格式化,本地化环境还会影响生成日期和时间的方式。

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>
<title>Date Formatting</title>
</head>
<body>
<h1>Date Formatting and locale</h1>
<fmt:timeZone value="EST">
<jsp:useBean id="currentTime" class="java.util.Date"/>

<h3>English, Great Britain</h3>
<fmt:setLocale value="en_GB" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

<h3>English, USA</h3>
<fmt:setLocale value="en_US" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

<h3>French, France</h3>
<fmt:setLocale value="fr_FR" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

<h3>Japanese, Japan</h3>
<fmt:setLocale value="ja_JP" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

<h3>Korean, Korea</h3>
<fmt:setLocale value="ko_KR" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

<h3>Spanish, Spain</h3>
<fmt:setLocale value="es_ES" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>


<h3>Arabic, Egypt</h3>
<fmt:setLocale value="ar_EG" />
<fmt:formatDate type="both" dateStyle="full" timeStyle="full" value="${currentTime}" /><br/>

</fmt:timeZone>
</body>
</html>

<fmt:formatDate>动作的属性

type: 可以是timedateboth。控制是否只生成时间,只生成日期,或者时间日期都生成。

dateStyle: 可以是short, medium, long 或 full(default)。控制打印日期使用的具体格式。

timeStyle: 可以是short, medium, long 或 full(default)。控制打印时间使用的具体格式。

value: 这是一个java.util.Date 类型的值,用于生成日期和时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值