C标签 EL表达式 jsp:include
JSP
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <p>EL</p> ${pics[0].name } ${var1 } <!-- 既然EL表达式这么简单轻松就能取到值 为什么还要jstl呢? jstl还可以判断 循环 switch... --> <p>JSTL</p> <c:if test="${!empty sessionScope.logUser}"> logUser is not null </c:if> <c:choose> <c:when test="${var2==3}"> pics length is 3 </c:when> <c:otherwise> pics length is not 3 </c:otherwise> </c:choose> <!-- 注意st是从0开始的 所以我这里需要+1 --> <c:forEach var="iter" items="${picList.files}" step="1" varStatus="st"> <c:out value="${iter.name }"/> <c:out value="${iter.size }"/> <c:out value="${st.index+1}"/>/<c:out value="${st.count }"/> </c:forEach> <!-- 其实中间还可以简写为 --> <c:forEach var="iter" items="${picList.files}" step="1" varStatus="st"> ${iter.name } ${iter.size } ${st.index+1}/${st.index+1} </c:forEach> </body> </html>
java
package fortest; import java.util.ArrayList; import java.util.List; import org.apache.struts2.ServletActionContext; import utils.MyUploadPic; import utils.MyUploadPicList; import com.opensymphony.xwork2.ActionSupport; public class TestTags extends ActionSupport{ public MyUploadPic pics[]; public MyUploadPicList picList; public MyUploadPic[] getPics() { return pics; } public void setPics(MyUploadPic[] pics) { this.pics = pics; } public MyUploadPicList getPicList() { return picList; } public void setPicList(MyUploadPicList picList) { this.picList = picList; } public String execute(){ System.out.println("test tag"); MyUploadPic pic1=new MyUploadPic(); pic1.setName("pic1"); pic1.setSize(3484); MyUploadPic pic2=new MyUploadPic(); pic2.setName("pic2"); pic2.setSize(2222); MyUploadPic pic3=new MyUploadPic(); pic3.setName("pci3"); pic3.setSize(837434); pics=new MyUploadPic[3]; pics[0]=pic1; pics[1]=pic2; pics[2]=pic3; List<MyUploadPic> list=new ArrayList<MyUploadPic>(); list.add(pic3); list.add(pic2); list.add(pic1); picList=new MyUploadPicList(); picList.setFiles(list);//MyUploadPicList这个类中有一个属性是List型的 // 对于一些简单的值 可以放在request中 ServletActionContext.getRequest().setAttribute("var1", "value1"); ServletActionContext.getRequest().setAttribute("var2", 3); ServletActionContext.getRequest().getSession().setAttribute("logUser", null); return "success"; } }
接下来是更重要的部分
后台向jsp传送了一个attribute名字为abc的对象 那么在include 的jsp页面中 可以直接使用${abc.xxx}嘛? 可以!
如果这个include的页面是在c标签的forEach循环中呢? 不能直接使用 但是使用下面的办法
http://stackoverflow.com/questions/7799716/passing-cforeach-variable-to-a-jspinclude
也就是
<c:forEach items="${cart.entries}" var="entry">
<c:set
var="entryFC" value="${entry}"
scope="request"></c:set>
<jsp:include
page="helper.jsp"></jsp:include>
</c:forEach>
那么helper页面就用entryFC.xxx 当然这个entryFC还是可以用entry这个名字的 只不过原作者的意思应该是表示区分以防混淆
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。