Jstl 总结

本文深入探讨了EL表达式在JSP页面中的使用,包括变量、数组访问、算术运算、关系和逻辑运算,以及如何利用EL表达式进行权限判断和条件输出。此外,还详细介绍了JSTL的`c:forEach`标签及其varStatus属性的强大功能,展示了如何通过此属性获取集合成员的相关信息。
var flag = "${ ! empty userList }";
var flag = "${ not empty userList }";
var flag = "${ userList != null}";
三者等价  都是true 



EL表达式

${list[index]} 

<c:forEach items="sessionScope.list" var="l">

然后在这里面进行获取${l.XXX}
</c:forEach>


如  ${"userlist[i]"} 

EL提供.和[]两种运算符来存取数据。下列两者所代表的意思是一样的:
等于
.和[]也可以同时混合使用,如下:
不过,以下两种情况,两者会有差异:
(1)当要存取的属性名称中包含一些特殊字符,如.或-等非字母或数字的符号,就一定要使用[],例如:
上述是不正确的方式,应当改为:


 在使用EL关系运算符时,不能写成:
    ${param.password1}= =${param.password2}
    或者
    ${${param.password1}= =${param.password2}}
    而应该写成
    ${param.password1= =param.password2}



 1.算术运算符有五个:+、-、*或$、/或div、%或mod

 2.关系运算符有六个:(等价的)  ==或eq、 !=或ne、  <或lt、>或gt、<=或le、>=或ge 

 3.逻辑运算符有三个:&&或and、||或or、!或not

 4.其它运算符有三个:Empty运算符、条件运算符、()运算符
      例:${empty param.name}、${A?B:C}、${A*(B+C)}


<%-- 显示一级菜单 --%>
                <s:iterator value="#application.topPrivilegeList">
                    <s:if test="#session.user.hasPrivilegeByName(name)">
                    <li class="level1">
                        <div onClick="menuClick(this);" class="level1Style">
                            <img src="style/images/MenuIcon/${id}.gif" class="Icon" />
                            ${name}
                        </div>    




      思考 :  针对 EL表达式不能调用方法;  
      但是使用权限时候,为了无权限的不显示,看出上面调用的方式是: 遍历所有权限,<s:if 判断有权限的显示,无权限的不显示
      那么要么使用struts2 OGNL表达式,要么 在Action直接遍历所有,一级一级的放入到ArrayListEL表达式 


  <!-- currentRoleId是存在request域中的、sysAdmin是存在application域中的,即servletContext--> 
<c:if test="${empty currentRoleId}"> 
     currentRoleId为空 
</c:if> 
<c:if test="${not empty currentRoleId}"> 
     currentRoleId不为空 
</c:if> 

<!-- 判断两者是否相等 --> 
<c:if test="${requestScope.currentRoleId eq applicationScope.sysAdmin}"> 
     currentRoleId和sysAdmin相等 
</c:if> 

<!-- 在这里就不是和empty一样了,在这里el表达式不相等不像判断是否为空那样,不为空是not empty,在这里不相等不是not eq,表示不相等应如下所示的取反操作 --> 
<c:if test="${!(requestScope.currentRoleId eq applicationScope.sysAdmin)}"> 
     currentRoleId和sysAdmin不相等 
</c:if> 


<!-- 不使用jstl判断,使用三目表达式输出 --> 
${!(requestScope.currentRoleId eq applicationScope.sysAdmin) ? "两者不相等" : "两者相等"} 

${not empty currentRoleId ? "不为空" : "为空"} 
[html] view plaincopyprint?
<!-- currentRoleId是存在request域中的、sysAdmin是存在application域中的,即servletContext中 -->  
<c:if test="${empty currentRoleId}">  
     currentRoleId为空  
</c:if>  
<c:if test="${not empty currentRoleId}">  
     currentRoleId不为空  
</c:if>  

<!-- 判断两者是否相等 -->  
<c:if test="${requestScope.currentRoleId eq applicationScope.sysAdmin}">  
     currentRoleId和sysAdmin相等  
</c:if>  

<!-- 在这里就不是和empty一样了,在这里el表达式不相等不像判断是否为空那样,不为空是not empty,在这里不相等不是not eq,表示不相等应如下所示的取反操作 -->  
<c:if test="${!(requestScope.currentRoleId eq applicationScope.sysAdmin)}">  
     currentRoleId和sysAdmin不相等  
</c:if>  


<!-- 不使用jstl判断,使用三目表达式输出 -->  
${!(requestScope.currentRoleId eq applicationScope.sysAdmin) ? "两者不相等" : "两者相等"}  

${not empty currentRoleId ? "不为空" : "为空"}  








##   Jstl 表达式 

<c:forEach>标签提供了varStatus属性,有时候这个属性的作用非常强大,主要是用来存放现在知道的成员的相关信息.
例如:
定义 varStatus="s",那么将会吧有关集合中的信息放在名称为"s"的属性中,这里的"s"也是四作用域中的属性名,对应着的属性值内部会存有相关的集合中的信息.而varStatus属性还有另外4个子属性,他们是index,count,first和last,这些全都是属性名,可以在EL表达式中通过这些属性名访问"s"中的对应的属性值.详细说明如下:

    属性名                      数据类型                                 意义
    index                        number                    现在指到的集合成员的索引(下标从0开始)
    count                        number                             指到的成员数目
    first                        boolean                    现在指到的集合成员是否为第一个成员
    last                         boolean                    现在知道的集合成员是否为最后一个成员

例:
   <%
  String[] names={"John","Lisa","James"};
  session.setAttribute("names",names);
  %>
  <c:forEach var="name" items="${names}" varStatus="s">
  <h3>
  <c:out value="${name}"></c:out>
  </h3>
  index:<c:out value="${s['index']}"></c:out><br/>
  count:<c:out value="${s['count']}"></c:out><br/>
  first:<c:out value="${s['first']}"></c:out><br/>
  last:<c:out value="${s['last']}"></c:out><br/>
  <hr/>
  </c:forEach>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值