Struts2 标签,这玩意没什么可说的,直接把以前做的笔记贴过来吧。
标签:
标签必须在jsp页面中才能使用,同时标签背后是java代码,当jsp页面被翻译成servlet代码,同时标签也被翻译成java代码
优点:
1、封装JSP中的java代码 ,页面代码更清晰,更易于维护;
2、封装UI组件 ,将一段html代码进行封装成组件,提高复用和开发效率;
缺点:
1、实现复杂
需要将代码从jsp中剥离出来编写Tag类,定义tld文件,然后在引用使用,比较繁琐
2、学习成本高
不同框架,不同公司都会有不同的标签库
tld文件说明:标签库描述文件,如要在JSP页面中实现JSP标签,必须首先定义实现标签的类,然后在标签库描述文件 (TLD)中将写好的类映射成jsp标签,最后在JSP文件中使用定义好的标签,就可以生成动态的JSP内容;
标签库的核心功能:
1、 逻辑控制 ,控制页面显示逻辑
2、 数据输出 ,取得处理结果数据,并展现数据
3、 页面组件
对HTML标签的扩展和扩充,添加框架本身特有的特性
这些标签对jsp来说,并不是必须的,只是对UI的开发起到辅助的作用
应该谨慎对待,事实上,这些标签往往可以通过其他的方式代替
数据标签
一、 Proerty 标签 :
Project.java:
package struts.demo.bean; public class Product { private int id; private String name; private float price; private java.sql.Date dateOfProducted; private String description; getter/setter public String toString(){ return String.format("Product[%s,%s,%s,%s]", id,name,price,dateOfProducted); } }
ProjectAction.java:
public class ProductAction { private Product product; private List<Product> products; public String show() { ProductService productService=new ProductService(); product=productService.getFirstProduct(); return Action.SUCCESS; } getter/setter
jsp:
<s:property/><br />------struts.demo.action.ProductAction@4a7df6 产品名称:<s:property value="product.name" /><br />------娃哈哈 产品价格:<s:property value="product.price" /><br />-------5.5 生产日期:<s:property value="product.dateOfProducted" /><br />-----11-4-9 产品说明:<s:property value="product.description" default="unknow" /><br />-----unknow
功能说明
获取对象的属性值 , 目标对象默认位于 ValueStack 栈顶
标签属性
value Object 对象的属性名称 , 默认直接输出 ValueStack 栈顶对象
default String 默认值 , 如果 value 为 null , 则输出此值 , 注意 value 为 null , 如果为 “” 则输出 “”
escape Boolean 是否进行 html 转义 , 默认为 true
escapeJavaScript Boolean 是否进行 javaScript 转义 , 默认为 false
以上都不是必选项
二、 set 标签 :
<s:set var="firstProductName" value="product.name" scope="application"/> 我们的第一款产品是 : <s:property value="#application['firstProductName']"/>
功能说明:
设定指定scope范围内对象的属性值
标签属性:
var 必选 String 被设置的对象属性名称
value no Object 值表达式
scope no String 范围,默认action(ActionContext)request/session/application
注意上面的value必须是值表达式,如果直接写值则不可以
三、push标签:
<s:push value="product"> 产品名称:<s:property value="name" /><br /> 产品价格:<s:property value="price" /><br /> 生产日期:<s:property value="dateOfProducted" /><br /> 产品说明:<s:property value="description" default="unknow" /> </s:push>
功能说明:
将对象压入ValueStack栈顶,标签结束则出栈
标签属性:
value 必选 Object 被入栈对象的表达式
注意与property标签中对比
四、bean标签:
<s:bean name="struts.demo.bean.Product" var="product2"> <s:param name="name" value="%{'Nokia 6120c'}" /> <s:param name="price" value="1095.0" /> </s:bean> 产品名称:<s:property value="%{#product2.name}"/><br /> 产品价格:<s:property value="%{#product2.price}"/>
功能说明 :
创建一个对象,并压入ValueStack栈顶
标签属性:
name 必选 String 实例的完全限定类名
var no String 在标签结束后能够继续引用实例的变量名
五、Action标签:
action.jsp:
targetAction 执行结果 :
<s:action name="target-action" namespace="/data-tags" var="targetAction" executeResult="true"/><br />
从 targetAction 中取值: < s:property value = "#targetAction.product.name" />
struts.xml:
<action name="target-action" class="struts.demo.action.ProductAction" method="show"> <result>/data-tags/target-action.jsp</result> </action>
target-action.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
这是来自 target-action 的 result(target-result.jsp) 的结果
功能说明 :
在当前页面中调用其他的 action
标签属性:
name 必选 String 配置的Action名称
namespace no String Action所在package的namespace
var no String 在页面中引用Action所使用的变量名
executeResult no boolean 是否执行Result并输出在当前页面上,默认为false
ignoreContextParames no boolean 是否忽略request parameters,默认为false
说明例如上例中的executeResult如果设置成false,则页面上的第一行不显示任何信息
六、dubug标签:
功能说明:显示ValueStack
没有标签属性
七、url标签:
功能说明:生成一个URL
标签属性:
action 必选 String URL指向的Action
namespace no String Action 所在 package 的 namespace
value no String 非 action 的 url , 此属性不能与 action 共存
var no String 不输出 url , 保存到变量中
<s:url action="editPet"> <s:param name="id" value="%{selected}"></s:param> </s:url>
八、 date 标签 :
生产日期 : < s:date name = "dateOfProducted" var = "dateFmt" format = "yyyy-MM-dd" />
< s:property value = "dateFmt" />< br />
功能说明:日期格式化
标签属性:
name 必选 String 被格式化的日期对象名
fomart no String 显示日期的格式
var no String 不输出,保存到变量中
控制标签
实现页面上的逻辑控制
if、elseif、else, 实现分支选择功能
iterator,实现迭代功能
集合操作,append、generator、subset、sort
一、if-elseif-else标签:
<s:property value="product.name" /> : <s:if test="product.price &it 3000">低档</s:if> <s:elseif test="product.price > 5000">中档</s:elseif> <s:else>高档</s:else>
功能说明 : 替代 java 语法中的 if/else
标签属性 :
test 必选 boolean 表达式 , 决定是否显示 if/else 标签体的内容
分页:
<!-- 分页 --> <div class="manu"> <s:if test="pagination.isFirstPage()"> <span class="disabled">First</span> <span class="disabled"> < Prev</span> </s:if> <s:else> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=1">First</a> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=<s:property value='pagination.getPrePage()'/>"> < Prev</a> </s:else> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="pagination.getPageNo()-4<1?1:pagination.getPageNo()-4" /> <s:param name="last" value="pagination.getPageNo()-1" /> <s:iterator> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=<s:property/>"> <s:property/></a> </s:iterator> </s:bean> <span class="current"><s:property value="pagination.getPageNo()"/> </span> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="pagination.getPageNo()+1" /> <s:param name="last" value="pagination.getPageNo()+4<pagination.getTotalPage()?pagination.getPageNo()+4:pagination.getTotalPage()" /> <s:iterator> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=<s:property/>"> <s:property/></a> </s:iterator> </s:bean> <s:if test="pagination.isLastPage()"> <span class="disabled">Next > </span> <span class="disabled">Last</span> </s:if> <s:else> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=<s:property value='pagination.getNextPage()'/>">Next > </a> <a href="${pageContext.request.contextPath }/myDownload!myDownloadList.action?pageNo=<s:property value='pagination.getTotalPage()'/>">Last</a> </s:else> </div>
二、 iterator 标签 :
<tr> <th>名称</th> <th>价格</th> <th>生产日期</th> </tr> <s:iterator value="products" status="stat"> <s:set var="bgcolor" value="%{'red'}" /> <s:if test="#stat.odd"> <s:set var="bgcolor" value="%{'#greed'}" /> </s:if> <tr bgcolor="${bgcolor }"> <td><s:property value="name" /></td> <td><s:property value="price" /></td> <td> <s:date name="dateOfProducted" var="dateFmt" format="yyyy-MM-dd"/> <s:property value="%{#dateFmt}" /> </td> </tr> </s:iterator>
功能说明 :
替代 java 语言中的 foreach 的功能
标签属性 :
value 必选 Object 被迭代的对象
status no String 迭代状态 ,IteratorStatus 对象
说明 :IteratorStatus :
index : 下标
count : 次数 ,index+1
first : 是否第一次
last : 是否最后一行
even : 偶数行
odd : 奇数行
三、 append 标签 :
<s:append var="products"> <s:param value="${myList1 }"></s:param> <s:param value="${myList1 }"></s:param> <s:param value="${myList1 }"></s:param> </s:append> <s:iterator value="%{#products}"> <s:property/> </s:iterator>
功能说明 :
将多个集合进行合并
标签属性 :
var 必选 String 合并后集合的变量名
四、 subset 标签 :
<s:subset source="products" start="0" count="3"> <s:iterator> <tr> <td><s:property value="name" /></td> <td><s:property value="price" /></td> <td> <s:date name="dateOfProducted" var="dateFmt" format="yyyy-MM-dd"/> <s:property value="%{#dateFmt}" /> </td> <tr> </s:iterator> </s:subset>
功能说明:
去集合的子集
标签属性:
source no Object 源集合
start no int 起始下标
count no int 子集合元素个数
var no String 引用的变量名
五、sort标签:
功能说明:
取集合的子集
标签属性:
comparetor 必选 java.util.Compartor 比较器类
source no Object 源集合
var no String 引用的变量名
<s:sort comparator="myCompartor" source="products"> <s:iterator> <!-- do something with each sorted elements --> <s:property value=".."/> </s:iterator> </s:sort>
表单标签
Form UI 标签
作用 : 生成对应懂得 HTML 表单元素
特性 :
表单项与 java 端属性绑定
基于框架的类型转换
基于框架的数据验证
基于框架的国际化
Struts2的Form UI标签并不是的转换成对应的html标签,它提供了一系列的主题,可以生成具有布局效果的UI
sample:生成原生的html标签
xhtml:生成table布局的html,默认主题
css_xhtml:生成css布局的html标签
ajax:生成支持ajax的html标签
一、form标签:
生成表单。
<s:form action="register" namespace="form-tags" method="post" enctype="multipart/form-data"> <s:textfield name="user.name" label="账号" /> <s:password name="user.password" label="密码" /> <s:file name="user.icon" label="照片" /> <s:textarea name="user.protocol" label="用户协议" cols="50" rows="6"/> <s:checkbox name="user.agreeProtocol" label="接受用户协议"/> <s:hidden name="user.src" value="%{#parameters.src}" /> <s:submit name="submit" value="提交" /> </s:form>
常用的标签属性 :
action String 表单提交目标 ,Struts action name 或者 url
namespace String 指定 Struts action 的 namespace
validate Boolean 是否启用客户端脚本验证
theme String 指定表单的主题 , 默认为 xhtml
其他 String 同 html form 的属性
所有表单项标签的通用属性:
name String 设置name属性,同时从ValueStack中取值
value Object 设置value属性,支持OGNL表达式
key String 从资源文件中加载本地化的标签值
label String 指定标签值,仅xhtml主题
labelPosition String 设置标签位置,top/left,仅xhtml主题
required Boolean 设置为必填项,会在标签后添加一个*,仅xhtml主题
id String 设置html id
cssClass String 设置html class
cssStyle String 设置html style
disabled Boolean 设置html disabled
tabindex int 设置html tabindex
二、select标签:
生成select标签(含option)
<s:form> <s:select list="products" listKey="id" listValue="name" emptyOption="true" label="产品" /> </s:form> <s:select list="{'222','333'}" emptyOption="true" label="产品" />
标签属性:
list 集合 指定option列表项
listKey String 如果list元素是复合对象,指定option value对应属性
listValue String 如果list元素是符合对象,指定option text对应属性
emptyOption Boolean 是否添加空 option
multiple Boolean 是否允许多选
三、 checkboxlist 标签 :
生成一组 checkbox
<s:form> <s:checkboxlist name="favors" list="products" listKey="id" listValue="name" label="您喜欢的产品" /> </s:form> <s:checkboxlist name="favors" list="{'dadf','ddd'}" label="您喜欢的产品" />
需要注意的是在 select 和 checkboxlist ,radio 中的 list 可以直接写一个集合 , 但这时候就不能再指定 listKey 和 listValue 了 ;
标签属性 :
list 集合 指定 option 列表项
listKey String 如果 list 元素是复合对象 , 指定 option value 对应属性
listValue String 如果 list 元素是符合对象 , 指定 option text 对应属性
四、 radio 标签 :
生成一组 radio
<s:radio name="favorite" list="products" listKey="id" listValue="name" label="您最喜欢的产品" /> <s:radio name="favorite" list="{'11','22'}" label="您最喜欢的产品" />
标签属性 :
list 集合 指定 option 列表项
listKey String 如果 list 元素是复合对象 , 指定 option value 对应属性
listValue String 如果list元素是符合对象,指定option text对应属性