JSTL_core

来源:互联网 发布:443端口是什么服务 编辑:程序博客网 时间:2024/06/11 18:20

  • cout
  • cset
  • cremove
  • ccatch
  • cif
  • cchoosecwhen 和 cotherwise
  • cforEach
  • cforTokens

<c:out>

<c:out> 标签用于输出一段文本内容到 pageContext 对象当前保存的 out 对象中,在通常情况下,pageContext 对象当前保存的 out 对象的数据是输出到客户端浏览器,所以,<c:out> 标签通常用于输出一段文本对客户端浏览器。如果 <c:out> 标签输出的文本内容中包含了需要进行转义的 HTML 字符,则 <c:out> 标签会默认对它们进行 HTML 编码后再进行输出,常见特殊字符转换如下:

字符 字符实体编码 < &lt; > &gt; & &amp;&apos;&quot;

<c:out> 标签有两种语法格式:

  • 没有标签体的情况:
<c:out value="value"        [escapeXml="true|false"]        [default="defaultValue"] />
  • 有标签体的情况,在标签体中指定输出的默认值:
<c:out value="value"        [escapeXml="true|false"]>    default value</c:out>

<c:out> 标签的属性说明如下表:

属性名 是否支持 EL 属性类型 属性描述 value true Object 指定要输出的内容 escapeXml true Boolean 指定是否将特殊字符进行 HTML 编码转换后再进行输出。默认为 true。 default true Object 指定如果 value 属性的值为 null 时输出的默认值

注意:

  • 当且仅当 value 属性的值为 null 时,<c:out> 标签输出默认值;如果没有指定默认值,默认为空字符串。
  • 如果 value 属性不是指向一个 java.io.Reader 对象,<c:out> 标签将调用这个对象的 toString 方法,然后输出获得的字符串内容。
  • 如果 value 属性指向一个 java.io.Reader 对象,<c:out> 标签将从这个 Reader 对象中读取数据后进行输出,当有大量数据要被输出时,将这些数据以对象的形式提供给 <c:out> 标签进行输出,将会极大提高系统性能。

<c:set>

<c:set> 标签用于设置各种 Web 域中的属性,或者设置 Web 域中的 java.util.Map 类型的属性对象或 JavaBean 类型的属性对象的属性。

<c:set> 标签有四种语法格式:

  • 使用 value 属性设置指定域中的某个属性的值:
<c:set value="value"        var="varName"        [scope="page|request|session|application"] />
  • 在标签体中设置指定域中的某个属性的值:
<c:set var="varName"        [scope="page|request|session|application"]>    body content</c:set>
  • 使用 value 属性设置 Web 域中的一个属性对象的某个属性:
<c:set value="value"        target="target"        property="propertyName" />
  • 在标签体中设置 Web 域中的一个属性对象的某个属性:
<c:set target="target"        property="propertyName">    body content</c:set>

<c:set> 标签的属性说明如下表:

属性名 是否支持 EL 属性类型 属性描述 value true Object 用于指定属性值 var false String 用于指定要设置的 Web 域属性的名称 scope false String 用于指定属性所在的 Web 域,默认为 page。 target true Object 用于指定要设置属性的对象,这个对象必须是 JavaBean 对象或 java.util.Map 对象 property true String 用于指定当前要为对象设置的属性名称

注意:

  • 如果使用第 1 种语法格式时的 vlaue 属性值为 null,或者会用第 2 种语法格式时的标签体内容为空,<c:set> 标签将从 scope 域范围中删除 var 属性指定的属性。
  • 在第 3、4 两种语法格式中:
    • 如果 target 属性的值是 java.utl.Map 对象,property 属性表示该 Map 对象的 key,如果 Map 对象没有指定的 key,就给 Map 对象增加指定的 key;
    • 如果 target 属性的值是 JavaBean 对象,property 属性表示 JavaBean 对象的属性,如果该 value 的类型与 JavaBean 属性的类型不匹配时,会根据 EL 的转换规则自动进行转换;
    • 如果 target 属性的值为 null(即 target 属性的值指定的对象不存在),或者 target 属性的值是一个 JavaBean 对象,但该 JavaBean 对象中不存在 property 属性指定 的属性,<c:set>标签将抛出异常;
  • 如果使用第 3 种语法格式时 value 属性的值为 null,或者使用第 4 种语法格式时标签体的内容为空,
    • 如果 target 属性的值是一个 java.util.Map 对象,就从该 Map 对象中删除 property 属性指定的关键字对应的项;
    • 如果 target 属性的值是一个 JavaBean 对象,就将该 JavaBean 的相应属性的值设置为 null。

<c:remove>

<c:remove> 标签用于删除各种 Web 域中的属性,其语法格式如下:

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

var 属性用于指定要删除的属性的名称,必需的;scope 属性用于指定要删除的属性所属的 Web 域,它们的值都不能接受动态值。如果没有指定 scope 属性,<c:remove> 标签就调用 pageContext.removeAttribute(varName) 方法,否则就调用 pageContext.removeAttribute(varName, scope) 方法。<c:remove><c:set> 标签第 1 种语法格式的 value 属性值为 null 时的作用相同。

<c:catch>

<c:catch> 标签用于捕获嵌套在标签中的内容抛出的异常,其语法格式如下:

<c:catch [var="varName"]>    nested action</c:catch>

var 属性用于标识 <c:catch> 标签捕获的异常对象,其值是一个静态的字符串,不支持动态属性值。<c:catch> 标签将捕获的异常对象以 var 指定的名称保存到 page 这个 Web 域中,如果没有指定 var 属性,则 <c:catch> 标签仅捕获异常,不在 page 域保存异常对象。如果 <c:catch> 标签体中的内容没有抛出异常,<c:catch> 标签将从 page 域中删除 var 属性指定的属性。

<c:catch> 标签可以捕获任何标签抛出的异常,并且可以同时处理多个标签抛出的异常,这样,可以对 JSP 页面的异常时行统一的处理。

JSP 处理异常的通用机制是出现重要异常后跳转到错误处理页面,建议尽量不要用 <c:catch> 标签来代替 JSP 的错误处理机制,只对一些次要异常才使用 <c:catch> 标签进行捕获处理。

<c:if>

JSP 页面的显示逻辑中也经常需要进行条件判断,<c:if> 标签可以构造简单的 “if-then” 结构的条件表达式,如果条件表达式的结果为真就执行标签体部分的内容。

<c:if> 标签有如下两种语法格式:

  • 没有标签体的情况:
<c:if test="testCondition" var="varName"        [scope="page|request|session|application"] />
  • 有标签体的情况,在标签体中指定要执行的内容:
<c:if test="testCondition" [var="varName"]        [scope="page|request|session|application"] />

<c:if> 标签属性说明如下表:

属性名 是否支持 EL 属性类型 属性描述 test true boolean 决定是否处理标签体中的内容的条件表达式 var false String 用于指定将 test 属性的执行结果会在到某个 Web 域中的某个属性的名称 scope false String 指定将 test 属性的执行结果保存到哪个 Web 域中

注意:

对于语法 2 ,如果指定了标签的 scope 属性,则必须指定 var 属性。

<c:choose><c:when><c:otherwise>

<c:choose> 标签用于指定多个条件选择的组合边界,它必须与 <c:when><c:otherwise> 标签一起使用。使用 <c:choose><c:when><c:otherwise> 三个标签,可以构成类似 “if-else if-else” 的复杂条件判断结构。

<c:choose> 标签没有属性,在它的标签体内只能嵌套一个或多个 <c:when> 标签和 0 个或一个 <c:otherwise> 子标签,并且同一个 <c:choose> 标签中的所有 <c:when> 子标签必须出现在 <c:otherwise> 子标签之前。如果 <c:choose> 标签内嵌套一个 <c:when> 标签和 <c:otherwise> 标签,就相当于 “if-else” 的条件判断结构;如果 <c:choose> 标签内嵌套多个 <c:when> 标签和一个 <c:otherwise> 标签,就相当于 “if-else if-else” 的条件判断结构。

<c:when> 标签只有一个 test 属性,该属性的值为布尔类型。test 属性支持动态值,其值可以是一个条件表达式,如果条件表达式的值为 true,就执行这个 <c:when> 标签体的内容。<c:when> 标签体的内容可以是任意的 JSP 代码。

<c:otherwise> 标签没有属性,它必须作为 <c:choose> 标签的最后分支出现。

<c:forEach>

<c:forEach> 标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复执行标签体中的内容。

<c:forEach> 标签有两种语法格式:

  • 循环迭代操作集合对象中的元素
<c:forEach [var="varName"]            items="collection"            [varStatus="varStatusName"]            [begin="begin"] [end="end"] [step="step"]>        body content</c:forEach>
  • 迭代执行固定次数的标签体内容
<c:forEach [var="varName"]            [varStatus="varStatusName"]            begin="begin" end="end" [step="step"]>    body content</c:forEach>

<c:forEach> 标签属性说明如下表:

属性名 是否支持 EL 属性类型 属性描述 var false String 指定将当前迭代的元素保存到 page 这个 Web 域中的属性名称 items true 任何支持的类型 将要迭代的集合元素对象 varStatus false String 指定将代表当前迭代状态信息的对象保存到 page 这个 Web 域中的属性名称 begin true int 如果指定 items 属性,就从集合中的第 begin 个元素开始进行迭代,begin 的索引值从 0 开始编号;如果没有指定的 items 属性,就从 begin 指定的值开始迭代,直到 end 值时结束迭代 end true int 类比 end 属性的描述 step true int 指定迭代的步长,即迭代因子的迭代增量

注意:

  • 如果指定 begin 属性,其值必须大于或等于零
  • 如果指定步长(step 属性),其值必须大于或等于 1
  • 如果 items 属性的值为 null,则要处理的集合对象为空,这时不执行迭代操作
  • 如果指定的 begin 属性大于或等于集合对象的长度,不执行迭代操作
  • 如果指定的 end 属性的值小于 begin 属性的值,不执行迭代操作

<c:forEach> 标签的 items 属性的值支持下面的数据类型:

  • 任意类型的数组
  • java.util.Collection
  • java.util.Iterator
  • java.util.Enumeration
  • java.util.Map
  • String

items 属性还支持与数据库有关的数据类型 java.sql.Result(包括 javax.sql.RowSet),这些数据类型通常结合数据库标签使用。对字符串的迭代操作通常使用 <c:forTokens> 标签或 JSTL 函数。

<c:forTokens>

<c:forTokens> 标签专门用于实现类似 java.util.StringTokenizer 类的迭代功能,但它是以单个字符为分隔符,同时可以指定多个字符作为多个并行的分隔符。

<c:forTokens> 标签的语法格式如下:

<c:forTokens items="stringOfTokens" delims="delimiters"            [var="varName"]            [varStatus="varStatusName"]            [begin="begin"] [end="end"] [step="step"]>    body content</c:forTokens>

<c:forTokens> 标签属性说明如下表:

属性名 是否支持 EL 属性类型 属性描述 var false String 指定当前迭代出的子字符串保存到 page 这个域中的属性名称 items true String 将要迭代的字符串 delims true String 指定一个或多个分隔符 varStatus false String 指定将代表当前迭代状态信息的对象保存到 page 这个 Web 域中的属性名称,代表当前迭代的状态信息的对象的类型为 javax.servlet.jsp.jstl.core.LoopTagStatus begin true int 指定从第 begin 个子字符串开始进行迭代,begin 的索引值从 0 开始编号 end true int 指定迭代到第 end 个子字符串,end 的索引值从 0 开始 step true int 指定迭代的步长,即每次迭代后的迭代因子增量

注意:

  • 如果指定 begin 属性,其值必须大于或等于零
  • 如果指定步长(step 属性),其值必须大于或等于 1
  • 如果指定的 end 属性的值小于 begin 属性的值,不执行迭代操作
0 0
原创粉丝点击