jsp标签jstl和el表达式
1.el表达式的使用
1)访问bean的属性
方式一:
${user.name},容器会依次从pageContext,request,session,application中查找(getAttribute)绑定名称为user的对象,并调用该对象的getName方法,最后输出。
并且比较友好,找不到对象会将null转换成""空字符串输出。但是一定要有get方法,如果找不到get方法,还是会error500错误。
指定查找范围:pageScope,requestScope,sessionScope,application来指定,例如${sessionScope.user.name},就算session找不到,其他地方也不找了
方式二:
${user["name"]}
${user.interest[0]},可以访问数组下标,要有get方法。
2)进行一些简单的运算,运算的结果可以给jsp标签的属性赋值,也可以直接输出。
a.算术运算 +- */ %
${1+1}直接输出2,没有字符串拼接 .${"2"+"4"}输出6
b.关系运算 > < = == >= !=
${2>1}直接输出true
c.逻辑运算 && || !
${1<2 && 2>3} false
d.empty运算
用来判断集合是否为空,或者是否是一个空字符串
<%
List list1=new ArrayList();
request.setAttribute("list",list1);
request.setAttribute("str2","");
${empty list} //输出true
${empty str2}//输出true
${empty null}//输出true
${empty aaa}//输出true,容器找不到aaa这个绑定名也会true
%>
3)读取请求参数值 e3.jsp?username=Sally
a.${param.username}等价于request.getParameter("username");
b.${paramValues.city}等价于request.getParamterValues("city");
jstl标签
将jstl相关的jar文件拷贝到WEB-INF/lib下
如果使用javaee5.0,已包含jstl相关的jar文件。一般不需要再拷贝。
使用taglib指令,导入相应的标签。
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
jstl的核心标签:
1)if
<c:if test="${user.gender == 'm'}">男</c:if>
<c:if test="${user.gender != 'm'}">女</c:if>
<c:if test="${user.gender == 'm'}" var="flag" scope="request">男</c:if> 等价于request.setAttribute("flag",运行结果true/false) ,scope可以写page,session,application
<c:if test="${!flag}">女</c:if> 通过上面一行的flag结果来判断
2)choose 相当于if{} elseif{} else{}
when可以出现1次或者多次。当test属性为true时,会执行该分支。
otherwise可以出现0次或者1次。表示例外。
<c:choose>
<c:when test="${user.gender == 'm'}">男
</c:when>
<c:when test="${user.gender == 'f'}">女
</c:when>
<c:otherwise>保密
</c:otherwise>
</c:choose>
3)forEach标签,用来遍历集合或者数组。每次从集合或者数组中取一个元素,然后将其绑定到pageContext上,绑定名由var属性来指定。
items属性用来指定要遍历的集合活着数组,可以使用el表达式。
var属性用来指定绑定名,绑定范围固定是pageContext.
varStatus属性:用来制定一个绑定名,绑定范围固定是pageContex。绑定值是一个特殊的对象,该对象提供了一些方法,用来获得当前遍历的状态。getIndex():获得当前被遍历的元素的下标(从0开始)。getCount():获得当前是第几次遍历(从1开始)
<c:forEach items="" var="" varStatus="">
</c:forEach>
例子:
<table>
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>index</td>
<td>count</td>
</tr>
<c:forEach items="${userlist}" var="u" varStatus="s">
<tr class="row${s.index%2+1}"> //css写个row1 row2的class,表格行颜色互换
<td>${u.name}</td>
<td>${u.gender}</td>
<td>${u.age}</td>
<td>${s.index}</td>
<td>${s.count}</td>
</tr>
</c:forEach>
</table>
例子:listEmp.jsp
servlet用转发把emplist传给jsp。删除按钮<a href="del.do?id=${u.userid}" onClick="return confirm('确定删除${u.username}吗?')">删除</a>
修改按钮<a href="load.do?id=${u.userid}>修改</a>
2.自定义标签 简单标签(new) 复杂标签(old)
step1,写一个java类,继承SimpleTagSupport类。
step2.orerride doTag方法,在该方法里面编写处理逻辑。
step3,描述标签(.tld文件)
<%@taglib uri="test" prefix="c1"%>
<c1:hello msg="hello world" qty="100"/>
包名tag,类名HelloTag.
重写doTag()方法.并增加属性,这些属性要有对应的set方法。
private String msg;
private int qty;
public void doTag() throws JspException, IOException {
PageContext ctx=(PageContext)getJspContext();
JspWriter out = ctx.getOut();
for(int i=0;i<qty;i++){
out.println(msg+"<br/>");
}
}
然后新建一个mytag.tld,放到WEB-INF下面和web.xml平级。
把c.tld里面xml根元素和taglib根元素复制过来。
把tlib-version,short-name,url拷过来
并把url改成test,short-name 改成c1
把23到41行tag标签复制过来。name改成hello。tag-class改成tag.HelloTag。
如果把body-content改成empty,那么在jsp里,不能写标签体。如果写成scriptless,表示带有标签体,但不能写任何java代码<c1:hello msg="hello world" qty="100"></c1:hello>。如果写成JSP表示当中可以写java代码,有标签体。
attribute中,<name>写成msg,required如果写true一定要写msg,false可写可不写msg。rtexprvalue表示能否动态赋值,可以通过el表达式计算赋值。
再写个attribute,name写成qty,required写true,rtexprvalue写true例如jsp里qty="${1+7}"
写个日期标签和上面过程差不多
<c1:date pattern="yyyy-MM-dd"/>
jsp标签jstl和el表达式的更多相关文章
- 【转】JSP中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...
- jsp中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
- jstl,el表达式
在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...
- JSTL与EL表达式(为空判断)
JSTL与EL表达式(为空判断) 一.循环遍历集合 1.在jsp中引入标准函数声明 <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...
- JSP页面无法识别EL表达式
昨天一直纠结一个问题,JSP页面无法获取${user}的值,一直显示的是${user},今天解决了,原来是JSP页面无法识别EL表达式. 我的web.xml的声明如下: <!DOCTYPE we ...
- JSP页面不支持EL表达式的解决方法
JSP页面不支持EL表达式的问题就出在新建项目时web.xml的声明上. web.xml声明部分一般分为如下版本的xsd: web-app_2_2.xsd web-app_2_3.xsd web-ap ...
- jsp页面无法解析EL表达式问题
Servlet版本的问题.原来Servlet中可以设定是否解析EL表达式,只有2.4版本的Servlet默认是解析EL表达式的,而其他版本是默认不解析EL表达式.于是把web.xml中使用的2.5版本 ...
- Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)
一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...
- JSP标签语法、JSTL标签库、EL表达式辨析
<一.JSP > JSP 语法语法格式: <% 代码片段 %>或者<jsp:scriptlet> 代码片段</jsp:scriptlet> JSP声明 ...
随机推荐
- Java知识回顾 (10) 线程
再次声明,正如(1)中所描述的,本资料来自于runoob,略有修改. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. Java 给多线程编程提供了内 ...
- JS如何判断浏览器类型和详细区分IE各版本浏览器
/* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ...
- AxWindowsMediaPlayer控件的使用
首先要知道如何将控件添加到工具箱中,步骤如下: “工具箱”中单击右键,选择“选择项”菜单,打开“选择工具箱项”窗口,选择“COM组件”标签,在列表中找到并勾选“Windows Media Player ...
- CDH下集成spark2.2.0与kafka(四十一):在spark+kafka流处理程序中抛出错误java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V
错误信息 19/01/15 19:36:40 WARN consumer.ConsumerConfig: The configuration max.poll.records = 1 was supp ...
- 十进制转为x进制的递归代码
十进制转为x进制的递归代码 #include <stdio.h> void fun(int n,int x) { ) return; else { fun(n/x,x); printf(& ...
- Android Activity的4种启动模式
Activity的启动模式 standard 默认标志的启动模式,每次startActivity都是创建一个新的activity的实例,适用于绝大数情况 singleTop 单一顶部,如果要开启的ac ...
- 分析轮子(七)- RandomAccess.java
1:还是先上一个类的继承关系比较图吧! 2:看一下 RandomAccess.java 的源码,空空如也,什么都没有,那她有什么用处呢? /** * Marker interface used by ...
- Java之Servlet
Servlet规范了JavaWeb项目的结构Servlet的规范约束了服务器如何来实现Servlet规范,如何解析JavaWeb项目的结构. Java就是通过接口来约束 Servlet规范的jar就在 ...
- cmder里ls、pwd、自定义的alias等一系列命令都无法使用
win10下cmder很多命令history pwd无法使用,ls字体也没有颜色显示,其根本原因是win10下cmd控制台版本问题,切换回老版本就OK了
- Android中APK签名工具之jarsigner和apksigner详解
一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验 ...