Struts2.2 Tags

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 &gt 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对应属性

 

猜你喜欢

转载自xdwangiflytek.iteye.com/blog/1567742
今日推荐