strut1.x及JSTL的标签库、EL表达式
struts标签库
国际化配置
配置国际化
1.国际化配置
在struts自带的app中的struts-config.xml中的<message-resources parameter="MessageResources"/>加入到项目中的配置文件中默认为struts-config.xml。
2.国际化文件导入
MessageResources.properties(位于 \struts-1.3.10\src\apps\blank\src\main\java\MessageResources.properties ),并将该文件放入项目文件的src下
在jsp文件头部分加入
<%@taglib uri="http://struts.apache.org/tags-bean"prefix="bean" %>
语法
hello标签: <bean:write name="hello"/>
这样就会显示在request设置的信息
Java
request.setAttribute("hello","cfltaglib");
分类
在struts1.3的版本中,taglib分为: bean htmllogic nested
每种标签的使用和定义说明在相应dtld文件中有相关的说明。tld文件是什么?打开文件可以看见,主要是一些xml配置,记录了该标签.
如:
版本号 <tlib-version>1.3</tlib-version>
jsp版本号 <jsp-version>1.2</jsp-version>
建议前缀使用名,当然也可以不使用它的建议,为了统一标准和开发的便利最好还是和建议的一致或者整个项目开发组保持一致即可。
<short-name>bean</short-name>
uri资源定位文件的地址<uri>http://struts.apache.org/tags-bean</uri>
这个即是用来访问存放在struts服务服务器上的资源地址的,这个地址是tags-bean的资源定位地址。当然和我们平时接触的url不一样。
tld的根目录是taglib,用来定义对应的标签的描述放在子元素的tag元素中,对应的例子和使用说明。
Bean
用来访问javabean中的定义的一些数据,而查找则是利用标签中的name来查找,查找的顺序是则是按照设置的scope里设置的范围来进行查找。如果没有针对该标签设置特定的范围则查找的顺序则是page,request, session, application。另外三中标签也是这样一个原理来进行查找和显示处理数据的。
1.输出文本
<bean:write name="hello"/>
2.格式化日期
<bean:write name="propertyname"format="yyyy-mm-dd" />
3.输出javabean对象属性
<bean:write name="beanname"property="property" />
Name:为javabean对象
property:为javabean中提供了get和set方法的属性。
Logic
执行逻辑判断,这里的逻辑判断仅限于用于数据显示的逻辑判断和后面关于业务的逻辑处理还是有区别的。标签着重的还是数据的显示。
引入<%@taglib uri="http://struts.apache.org/tags-logic"prefix="bean" %>
1.是否为空
<logic:empty name="hello"> 当为空时进入这里进行判断 </logic:empty> <logic:empty name="hello"> 当不为空是则进入这里进行判断 </logic:empty>
类似的还有logic:present
2.迭代器
<logic:iterate name="listname"> </logic:iterate>
其实显示大都一致,无非是在后台对相应的变量在javabean内配置相应的数据即可。
Html
主要是用来配置前端表单显示的标签库,使用起来很是方便。
如:<html:button />则会构造一个按钮,有点类似在.net中的asp空间,<asp:button/>让我有点恍如昨天还在.net中的赶脚。
更多:http://www.360doc.com/content/13/1227/16/1007797_340571617.shtml
EL表达式
在struts1.x中还配用了EL表达式来进行辅助工作,类似脚本的表达结构,也是直接在page、request、session、application中查找数据,但是不同的是直接返回的是在javabean中设置的对象类型。设置的是何种数据类型就返回什么样的数据类型。当然也是可以直接访问在javabean的对象的属性数据的。
语法:
${ name} or ${javabean.property}
使用起来相对简单,用户不用考虑数据的类型直接使用。而后struts2因为安全问题,不能嵌套使用EL表达式了,但是在html标签中还是可以使用。struts使用的是OGNI表达式,一种lambda的表达方式,但是也能够兼容普通的写法。后面的文章会解释使用。
也就是<s:url id="selectData1"value="${pageContext.request.contextPath}这样是不可以的,而<span>${name}</span>还是可以使用的。另外在页面也可以启用表达式,----<%@ page isELIgnored="false" %> 启用EL表达式,jsp2.0默认是启用的。
el还涉及到操作符,也能够完成类似struts1.x标签库的效果。更多:http://www.blogjava.net/supercrsky/articles/179363.html。
JSTL
Jsp standard taglibrary一个不断完善的开源标签库,包括core fmt sql tlv四个标签库。
使用时需要引用到两个jar包,jstl.jar和standard.jar。迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。通常EL表达式会配合使用。
环境配置
导入.jar包
Jstl.jar和standard.jar
导入uri资源文件
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="h"%>,这里我自定义写成了h,当然一般情况还是推荐写为c。
分类
Core
主要用于显示数据,可以替代 out 或者 <%=%> 标签来输出对象的值。类似struts中的write
demo
<li>测试jstl核心库</li> <br> <li>普通表达式</li> <br> <h:out value="123普通文本显示" /> <li>结合EL表达式显示在servlet中设置的属性</li> <br> : <h:out value="${hello}" /> <li>当显示为空时,显示相应的缺省值</li> <br> : <h:out value="${hellodefault }" default="没有值" /> <li>显示html字符串</li> <br> :显示html效果 :${zi } <br> :利用核心库标签直接显示html : <h:out value="${zi }" escapeXml="true" /> <br> <p>H:set & H:remove 设置变量及移除</li> <b r> :<h:set value="setVal" var="setID" />显示在set中的value“setVal” : ${setID } <li>if条件控制</li> <br> <h:if test="${V1 lt V2 }"> :v1 小于 vs </h:if> <p> 循环控制 <li>传统jsp方式加载表格数据</li> <br> <% List userList = (List) request.getAttribute("user"); %> <table border="1"> <tr> <td>name</td> <td>age</td> <td>height</td> </tr> <%if(userList==null || userList.size()==0){ %> <tr> <td colspan=3>对不起,没有数据!</td> </tr> <%}else{ for(Iterator iter=userList.iterator();iter.hasNext();){ People people =(People)iter.next(); %> <tr> <td><%=people.student.name%></td> <td><%=people.student.age %></td> <td><%=people.height %></td> </tr> <% } } %> </table></body> <li>利用jstl标签显示表格数据</li> <br> <table border="1"> <tr> <td>name</td> <td>age</td> <td>height</td> </tr> <h:choose> <h:when test="${ empty user}"> <tr><td colspan=3>真的,该表格没有数据!</td></tr> </h:when> <h:otherwise> <h:forEach items="${user}" var ="user" varStatus="vs"> <h:choose> <h:when test="${vs.count mod 2==0 }"> <tr bgcolor="grey"> </h:when> <h:otherwise> <tr bgcolor="red"> </h:otherwise> </h:choose> <td>${user.student.name }</td> <td>${user.student.age }</td> <td>${user.height }</td> </tr> </h:forEach> </h:otherwise> </h:choose> </table><br> <li>异常处理</li> <h:catch var="msg"> <% Integer.parseInt("shishi"); %> </h:catch> ${msg }<br> <p> <li>import引入资源</li> <h:import url="http://localhost:8080/drp3.0/login.jsp" /> <p> <li>c:url,c:param演示指定url传值</li> <p> <h:url value="http://www.baidu.com" var="val"> <h:param name="userID" value="3"></h:param> <h:param name="pwd" value="123456"></h:param> </h:url> ${val }<br> <li>url重定向</li>
Fmt
顾名思义就是针对格式化的处理
demo
<li>测试format日期</li> <fmt:formatDate value="${riqi}" /><br> <li>short格式日期</li> <fmt:formatDate value="${riqi}" dateStyle="short"/> <li>both格式日期</li> <fmt:formatDate value="${riqi}" type="both"/>
Sql
直接在页面上针对数据库进行操作,当然一般这种情况很少使用,仅限特殊情况。
demo
建立数据库连接 <sql:setDataSourcedriver=”driverClass” url=”jdbcURL” user=”username” password=”pwd” [var=”name”] [scope=”page|request|session|application”]/>
后序
JSTL、struts标签、EL表达式都是自定义标签的一种,而EL是servlet的标准,通常都会兼容使用,在一开始是为了来简化页面,杜绝页面java代码的出现;struts标签机JSTL都需要相应的jar包来配置,以及相应的uri定位资源引入。jstl是相对的标准,而struts开发包也携带了jstl的jar包,查询资料有讲struts标签的性能相对jstl差点,具体还没有实践过,没有体会。总的来讲,都是标签库的一种。具体使用,个人习惯结合项目标准来吧。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。