JSTL标签
JSTL(Jsp Standard Tag Library)jsp标准标签库
用JSTL标签来替换jsp页面中的java片段,这样可以使得jsp页面简洁
1. c out标签
引入标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% //out.println("hello.world"); //如果域对象中有相同的属性名,c:out的优先级是pageContext>request>session>application request.setAttribute("abc","你好<a href='http://www.baidu.com'>百度</a>"); // session.setAttribute("abc","你好2"); // application.setAttribute("abc","你好3"); // pageContext.setAttribute("abc","你好4"); //如何输出对象的值 User user = new User(); user.setName("小明"); user.setAge(19); request.setAttribute("user1",user); %> <c:out value="hello,world"></c:out> <h1>如何输出request/session/application/pageContext</h1> <!-- escapeXml 用于指定是否按照html样式显示,默认为true[文本输出] false[html输出] --> <c:out value="${abc}" default="null值" escapeXml="false" ></c:out> <h1>输出对象的值</h1> <c:out value="${user1.name}"></c:out>|| <c:out value="${user1.age}"></c:out> ${user1.name} @@ ${user1.age}
<% //标签等价于 // request.setAttribute("abc","中国北京"); %> <c:set var="abc" value="中国北京" scope="request" ></c:set> <c:out value="${abc}"></c:out>
3. c:remove标签
<% request.setAttribute("a","你好"); %> c:remove之前 <c:out value="${a}"></c:out> <!-- 如果不写scope,则删除四个域里面的变量a --> <c:remove var="a" scope="request"/> c:remove之后 <c:out value="${a}"></c:out>
<c:catch var="myexception"> <% int a=8/0; %> </c:catch> <c:out value="${myexception}"></c:out>
<% request.setAttribute("a","hell3o"); request.setAttribute("age","54"); //放入一个Rat对象 Rat rat = new Rat(); rat.setName("小宝"); rat.setAge(1); request.setAttribute("rat1",rat); %> <h3>字符串判断</h3> <c:if test="${a=='hello'}"> ok! </c:if> <c:if test="${a!='hello'}"> on ok </c:if> <h3>判断数值</h3> <c:if test="${age==56}"> 等于56 </c:if> <c:if test="${age<56}"> 小于56 </c:if> <br> <c:if test="${age>10 and age<99}"> age>10 and age<99 </c:if> <br/> <h3>判断对象的属性</h3> <c:if test="${rat1.age==1}"> 小老鼠 </c:if>
这三个标签通常一起出现
<% //放入一个Rat对象 Rat rat = new Rat(); rat.setName("小宝"); rat.setAge(4); request.setAttribute("rat1",rat); %> <h3>c_choose</h3> <c:choose> <c:when test="${rat1.age<2}"> 老鼠太小 </c:when> <c:when test="${rat1.age>2 and rat1.age<8}"> 老鼠不大不小 </c:when> <c:otherwise> 老鼠太大 </c:otherwise> </c:choose>
<% ArrayList<Rat> al = new ArrayList<Rat>(); Rat rat1 = new Rat(); rat1.setName("小宝1"); rat1.setAge(11); Rat rat2 = new Rat(); rat2.setName("小宝2"); rat2.setAge(22); Rat rat3 = new Rat(); rat3.setName("小宝3"); rat3.setAge(33); al.add(rat1); al.add(rat2); al.add(rat3); request.setAttribute("allRats",al); %> <h3>传统方法</h3> <% for(Rat rat : al){ out.println(rat.getName()+","+rat.getAge()); } %> <h3>迭代标签 c:forEach</h3> <!-- 标签会从allRats中取出一个个的Rat,然后放入rat变量中,rat变量表示取出的具体的一个对象 --> <c:forEach items="${allRats}" var="rat"> <c:out value="姓名:${rat.name}"></c:out> <c:out value="年龄:${rat.age}"></c:out> <br/> </c:forEach> <h3>迭代指定次数</h3> <c:forEach var="i" begin="0" end="10"> <c:out value="${i}"></c:out><br/> </c:forEach> <h3>指定迭代步长</h3> <c:forEach var="i" begin="0" end="10" step="2"> <c:out value="${i}"></c:out><br/> </c:forEach>
<% String str ="11,234,你好,@3"; request.setAttribute("string",str); %> <c:forTokens items="${string}" delims="," var="t"> <c:out value="${t}"></c:out> </c:forTokens> 在javascript中使用JSTL <script type="text/javascript" language="javascript"> function abc(){ return window.confirm("确认删除?"); } function gotoPage(){ var inputPage = document.getElementById("inputPage").value; //校验pageNow范围 if(inputPage<=0 || inputPage>${pageCount}){ alert("页数越界"); return false; }else{ window.location.href="/UserManageSys/UsersClServlet?flag=fenye&pageNow="+inputPage; } } </script>
<% Rat rat1 = new Rat(); rat1.setName("小宝1"); rat1.setAge(11); Rat rat2 = new Rat(); rat2.setName("小宝2"); rat2.setAge(22); //Map Map map = new HashMap(); map.put("aa",rat1); map.put("bb",rat2); request.setAttribute("rats",map); //Set Set set = new HashSet(); set.add(rat1); set.add(rat2); request.setAttribute("myrats",set); %> <h3>对map的迭代</h3> <c:forEach items="${rats}" var="rat"> key=${rat.key},姓名=${rat.value.name},年龄=${rat.value.age} </c:forEach> <h3>对set的迭代</h3> <c:forEach items="${myrats}" var="rat"> 姓名=${rat.name},年龄=${rat.age} </c:forEach>
<c:if test="${empty rats}"> 没有老鼠 </c:if> <c:if test="${!empty rats}"> 有老鼠 </c:if>
重定向到其他url
<c:redirect url="http://www.google.ca"></c:redirect>
将其他页面引入,在引入的时候,还可以传入参数。例如,a.jsp不通过中转器servlet,直接向b.jsp用地址栏?id=10传参数,那么在b.jsp,如果不用request.getParameter,则可以用c:param传参数,在b.jsp直接用${param.id}接收参数
a.jsp:
<a href="b.jsp?id=9">超链接</a>b.jsp:
${param.id }
struts常用标签
①html标签
②bean标签
③logic标签
1. html标签
这类标签,实际上就是普通的html标签,struts设计者主要是为了和struts框架同意,对普通的html标签做了一个封装,它的本质仍然是html标签
说明:*.tld文件叫标签描述文件(tld : tag library description)
引入struts标签库
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%--property:就是button的name --%> <html:button property="mybutton1" value="提交" ></html:button> <html:image>与<html:img>的区别 <html:image src="image/starFull.jpg"onclick="click1();" ></html:image> <html:img src="image/starFull.jpg"/>
<html:image src="image/starFull.jpg"onclick="click1();" ></html:image> <html:img src="image/starFull.jpg"/>image实际上是一个图片按钮,而img是一个纯粹的图片
struts的html标签如果涉及输入信息,struts框架认为,必须和一个表单类对应,而且应该放到一个表单标签里面<html:form>
注意:普通表单提交,要带上项目名称,而<html:form>提交不要带项目名称
在struts的html标签中,form标签是最重要的标签,它和struts框架紧密结合。form标签必须和一个ActionForm对应,当form的各个字段与ActionForm的属性匹配时,那么客户端把form提交后,struts框架将保存用户的输入到对应的ActionForm中,这样就完成了标签与组件的交互工作。
典型例子:
<%--property:就是button的name --%> <html:button property="mybutton1" value="提交" ></html:button> <html:image src="image/starFull.jpg" onclick="click1();" ></html:image> <html:img src="image/starFull.jpg"/><br/> <html:link href="http://www.sohu.com">连接到sohu</html:link><br/> <%--html:form --%> <html:form action="/login.do" method="post"> <html:text property="name"></html:text> <html:checkbox property="fruit" value="apple">apple</html:checkbox> </html:form>
2. bean标签的使用
<!-- 导入bean标签 --> <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
不能把属性理解成就是属性变量,而应该是变量对应的get/set方法
①bean:write
<% request.setAttribute("abc","hello world"); Cat cat = new Cat(); cat.setName("小明"); cat.setAge(30); request.setAttribute("cat",cat); %> <h3>bean标签的使用</h3> <!-- bean:write用于输出信息 --> <bean:write name="abc"/> <h3>输出对象属性名</h3> <bean:write name="cat" property="name"/><br>
该标签通常和资源文件配置使用可以更加方便的输出信息。输出信息在资源文件中配置ApplicationResources.properties
key1=welcome {0} #在实际开发中,我们可以把错误号统一,在需要显示的时候,直接使用 err1 =your error is {0} and {1}
<h3>bean:message</h3> <bean:message key="key1" arg0="jone" /> <bean:message key="err1" arg0="用户名为空" arg1="密码为空"/>
<!-- 导入logic标签 --> <%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<% Cat cat1 = new Cat(); cat1.setName("aa"); cat1.setAge(9); Cat cat2 = new Cat(); cat2.setName("bb"); cat2.setAge(12); Cat cat3 = new Cat(); cat3.setName("cc"); cat3.setAge(16); List<Cat> al = new ArrayList<Cat>(); al.add(cat1); al.add(cat2); al.add(cat3); request.setAttribute("cats",al); %> <h3>logic标签使用</h3> <logic:iterate id="mycat" name="cats"> <bean:write name="mycat" property="name" />- <bean:write name="mycat" property="age"/><br/> 或者EL输出 ${mycat.name }-- ${mycat.age }<br/> </logic:iterate>
<logic:empty name="ee"> ee属性不存在<br/> </logic:empty> <logic:notEmpty name="cats"> cats存在<br/> </logic:notEmpty>
<logic:iterate id="mycat" name="cats"> <logic:greaterThan name="mycat" value="20" property="age"> <bean:write name="mycat" property="name"/>年龄大于20岁 </logic:greaterThan> </logic:iterate>
JSTL -> EL -> Struts标签