struts2常用标签

感谢原作者, 因为struts标记要常常复习下,就转过来了,原文链接<a target=_blank href="http://www.open-open.com/lib/view/open1331393920452.html" target="_blank">http://www.open-open.com/lib/view/open1331393920452.html</a>
</pre><pre name="code" class="javascript">struts2常用标签总结:

struts2的作用,struts2标签库提供了主题,模板支持,极大的简化了视图页面的编写,而且,struts2的主题,
模板都提供了很好的扩展性,实现了更好的代码复用,struts2允许在页面中使用自定义组件,这完全能满足页面
显示复杂,多变的需求.

struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说struts2提供了
大部分标签,可以在各种表现技术中使用,包括最常用的jsp页面,也可以说velocity和freemarker 等模板技术中使用;

struts2标签的分类

1) UI标签,user interface,用户界面标签,主要用于生成html元素标签,UI标签又可以分为表单标签和非表单标签

2) 非UI标签,主要用于数据访问,逻辑控制等的标签, 非UI标签可分为流程控制标签(包括用于实现分支,循环等流程控制的标签)
   和数据访问标签(主要包括用户输出valuestack 中的值, 完成国际化等功能)
   
3) ajax标签

struts2标签的使用

1) struts2 使用前要在jsp页面中引入标签 <%@ taglib uri="/struts-tags" prefix="s" %>

2) 在web.xml 中声明要使用的标签,例如struts2 2.3.2版本引入方式
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   
3)
  (a) property 标签, 用于输出指定的值:[类中属性, 类中的方法]
  
   <s:property value="%{@cn.csdn.hr.domain.User@name}" />
   <s:property value="@cn.csdn.hr.domain.User@name" />
   <s:property value="%{@cn.csdn.hr.domain.User@study()}" />
   
  (b) 访问某一个范围内的属性
  
   采用pageContext 对象往page 范围内存入值来验证 #attr 搜索顺序是从page开始的,搜索的顺序为: page, request, 
   session, application, set标记存值的使用存到request作用域中, 在jsp页面中访问的时候不用加任何的标识符,即可以
   直接访问, 如果不同的作用域就不一样了.
   <%
       pageContext.setAttribute("name", "laowang", PageContext.PAGE_SCOPE);
   %>
       <s:property value="#attr.name" />
       
  (c) 获取request 作用域中的值:
      (i)     <s:property value="#request.user1.realName" />
      (ii)    <s:property value="#request.user1['realName']" />
      (iii)   <s:property value="#user1.realName" />
      (iiii)  <s:property value="#user1['realName']" />
      (iiiii) ${requestScope.user1.realName} || ${requestScope.user['realName']}
      
  (d) 其它大致类似:
     <s:property value="#attr.user1.realName"/>
     <s:property value="#session.user1.realName"/>
     <s:property value="#session.user1['realName']"/>
     ${sessionScope.user1.realName }  || ${sessionScope.user1['realName'] }
     <s:property value="#application.user1.realName"/>
     ${applicationScope.user1.realName }  || ${applicationScope.user1['realName'] }
     
  (e) iterator 标签的使用
     <!--使用set标签,value指定集合 比如: value="#attr.list"  value="#request.list"-->
     <!-- status 可选属性,该属性指定迭代时的IteratorStatus 实例-->
     <!-- status.odd 返回当前被迭代元素的【索引】是否是奇数-->
     <s:set name="list" value="{'a','b','c','d','e'}" />
     <s:iterator var="ent" status="statu" value="#request.list" >
        <s:if test="%{#statu.odd}" >
           <font color="red"><s:property value="#ent" /></font>
        </s:if>
     </s:iterator>
     
  (f) struts2 读map可是相当的简单,可见struts2 标签功能的强大
      map集合的特点和json差不多,json是一个对象一个json对象, map这里是个集合
      #{key:value, key:value, key:value, ......}
      以上的语法就直接生成了一个Map类型的集合,该Map对象中的每个key - value对象之间用英文的冒号隔开,多个元素之间用逗号分隔;
      <s:set var="map" value="#{'1':'laowang', '2':'老王', '3':'大猩猩'}" ></set>
      <s:iterator value="#map">
        <s:property value="key" /> :: </s:property value="value" />
      </iterator>      
    
  (g) 遍历集合::
  
      <!--遍历出价格大于30000的-->
      <s:iterator var="user" value="#session['users']">
        <s:if test="%{#user['price'] > 3000}" >
           <s:property value="#user['price']" />
        </s:if>
      <s:iterator>
      
      <!--$是取出价格大于3000的最后一个值-->
      <s:iterator value="u" value="#session.users.{$(#this['price']>3000)}">
         <s:property value="price" />
      <s:iterator>
      
      [简述一下iterator的介绍:]
      
      iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组
      
      <s:set name="list" value="{'zhangming','xiaoi','liming'}" />
      <s:iterator value="#list" status="st">
        <font color=<s:if test="#st.odd">red</s:if><s:else>blue</s:else>>
      <s:property /></font><br>
      </s:iterator>
      
      value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
      id:可选属性,指定集合里元素的id。
      status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
      int getCount(),返回当前迭代了几个元素。
      int getIndex(),返回当前迭代元素的索引。
      boolean isEven(),返回当前被迭代元素的索引是否是偶数
      boolean isOdd(),返回当前被迭代元素的索引是否是奇数
      boolean isFirst(),返回当前被迭代元素是否是第一个元素。
      boolean isLast(),返回当前被迭代元素是否是最后一个元素。
   
  (h) if else语句的使用
   
       <s:set name="age" value="21" />
       <s:if test="#age==23">
           23
       </s:if>
       <s:elseif test="#age==21">
           21
       </s:elseif>
       <s:else>
           都不等
       </s:else>
       
  (i) URL标签
    
        <!-- 声明一个URL地址 -->
        <s:url action="test" namespace="/tag" var="add">
            <s:param name="username">laowangang</s:param>
            <s:param name="id">12</s:param>
        </s:url>
        
        <s:a href="%{add}">测试URL</s:a>
        <s:a action="test" namespace="/tag"></s:a>
        以上的两个<s:a>标签的作用是一样的
        
  (j) data标签
  
        <%
            pageContext.setAttribute("birth",new Date(200,03,10),PageContext.REQUEST_SCOPE);
         %>
         
        <s:date name="#request.birth" format="yyyy年MM月dd日"/>
        <s:date name="#request.birth" nice="true"/>
        
        这个标签是按照format的格式去输出的
        
  (k) 表单:form
  
     <s:form action="test" namespace="/tag">
        <s:textfield label="用户名" name="uname" tooltip="你的名字" javascriptTooltip="false"></s:textfield>
        <s:textarea  name="rmake" cols="40" rows="20" tooltipDelay="300" tooltip="hi" label="备注" javascriptTooltip="true" />
        <s:password label="密码" name="upass"></s:password>
        <s:file name="file" label="上传文件"></s:file>
        <s:hidden name="id" value="1"></s:hidden>
     </s:form>
     
     <select name="edu">
        <option value="listKey">listValue</option>
     </select>
     
     <!--绑定map数据类型的最简易,注意map集合前要用 #-->
     <s:select list="#{'1',:'学士', '2':'硕士', '3':'博士'}" name="edu" label="学历" listKey="key" listValue="value" />
     
     <s:select list="{'c', 'java', 'python'}" value="java" />
     
     <!-- 必须有name -->
     <s:checkbox label="爱好 " fieldValue="true" name="checkboxFiled1"></s:checkbox>
             
     <!-- 多个checkbox -->
     <s:checkboxlist list="{'java','css','html','struts2'}" label="喜欢的编程语言" name="box" value="{'css','struts2'}" />
         
     <!-- map集合前要加# -->
     <s:checkboxlist list="#{1:'java',2:'css',3:'html',4:'struts2',5:'spring'}" label="喜欢的编程语言" name="boxs" value="{1,2}">
     </s:checkboxlist>
     
     <!-- radio -->       
     <%//从服务器传过来值
       pageContext.setAttribute("sex","男",PageContext.REQUEST_SCOPE);
       pageContext.setAttribute("sex1","男",PageContext.REQUEST_SCOPE);
     %>
     <s:radio list="{'男','女'}" name="sex" value="#request.sex"></s:radio>                
     <s:radio list="#{1:'男',2:'女'}" name="sex1" listKey="key" listValue="value" value="#request.sex1"></s:radio>  
     
     <!-- 防止表单提交的方式,至于token的实现原理要去看struts2的框架了,调用者只要知道放个token标记就可以防止表单重复提交了 -->
     <s:token></s:token>
                             
     <s:submit value="提交"></s:submit>
     
     Struts 2.3.4.1 General Availability  || Beta 版本




 sortTag.jsp: 【Struts2 ognl <s:sort ../>标签详解】
     
     <%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
     <%@ taglib prefix="s" uri="/struts-tags"%>
 
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml">
     <body>
        <s:set name="frank" value="{'aefi','abc','world!','kkkkk'}" />
        <s:bean id="sort" name="action.SortComparator"></s:bean>
        <s:sort source="frank" comparator="sort">
            <s:iterator>
                <tr><td>
                    <s:property />
                </td></tr>
            </s:iterator>
        </s:sort>
    </body>
    </html>

    <s:bean id="sort" name="action.SortComparator"></s:bean>
    即,关联相关的java类文件(此为比较器类SortComparator)。其中id属性可看作就是SortComparator的一个实例。
    若不加入bean标签,则出现异常:
    javax.servlet.jsp.JspException: comparator [null] does not implements Comparator interface
    由下面的"sort标签官网释义",可知:sort标签中的comparator属性=比较器实例=bean的id属性值="sort"。



    package action;
    import java.util.Comparator;

    // http://localhost:8080/OGNLTAG/jsp/sortTag.jsp 结果:(按字符串长度排序)
    public class SortComparator implements Comparator<Object> 
   {
        public int compare(Object arg0, Object arg1) 
        {
            return arg0.toString().compareTo(arg1.toString());
        }
    }

    <?xml version="1.0" encoding="gb2312"?>
    <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <constant name="struts.i18n.encoding" value="gb2312"/> 
       <package name="OGNLTAG" extends="struts-default"></package>
    </struts>


<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
EL表达式中fn函数的强大功能,很简单,很好用,很强大;

<s:if test="${(fn:substring(shoppingCart.productId,0,6) == '001001')}">

${fn:length(clazz.course)}
使用fu 函数之前要导入包:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

1) fn:contains  判断字符串是否包含另外一个字符串:
   <c:if test="${fn.contains(name, searchString)}" >
   
2) fn:containsIgnoreCase 判断字符串是否包含另外一个字符串:
   <c:if test="${fn.containsIgnoreCase(name, searchString)}" > 
   
3) fn:endsWith 判断字符串是否以另外字符串结束
   <c:if test="${fn.endsWith(fileName, ".txt")}" >

4) fn:escapeXml 把一些字符转换成xml表示
   ${fn:escapeXml(param: info)} 

5) fn:indexOf 子字符串在母字符串中出现的位置
   ${fn:indexOf(name, "_")}

6) fn:join 将数组中的数据联合成一个新的字符串,并使用指定的字符隔开:
   ${fn:join(array, ";")}

7) fn:length 获取字符串的长度,或数组的大小
   ${fn:length(shoppingCart.products)}

8) fn:replace 替换字符串指定的字符
   ${fn:replace(text, "-", "•")}   
   
9) fn:split 把字符串按照指定字符切分
   ${fn:split(customerNames, ";")}
   
10) fn:startsWith 判断字符串是否以某个子字符串开始
   <c:if test="${fn:startsWith(product.id, "100-")}"
   
11) fn:substring 获取子字符串
    ${fn:substring(zip, 6, -1)}

12) fn:trim	去除字符串前后空格
    ${fn:trim(name)}
	
13) fn:toLowerCase || fn:toUpperCase
   
imgObj.src="<img src="images/sortDesc.gif"></img>";
<column value="'${data.SUBSNAME}'"> </column>
<column value="'${data.SRTYPEID}'" > </column>
var fieldName=obj.id;

parent.document.getElementById("currentPage").value = forward;
parent.document.getElementById("currentPage").value = temp;
parent.document.all.queryConditionForm.submit();
var propertyName = parent.document.getElementsByName("order.propertyName")[0];
var ascending = parent.document.getElementsByName("order.ascending")[0];

?& (和号) 成为 &
?" (双引号) 成为 "
?' (单引号) 成为 '
?< (小于) 成为 <
?> (大于) 成为 >
<input value="Test" type="button" οnclick="alert("OK ");" />
<isap:label value="'产品编号'"></isap:label>

// 弹出小窗口
function c_showHidePopup(staffId) {
  try {
	var xpx = window.event.clientX - 220;
	var ypx = window.event.clientY;
	var width = 200;
	var height = 340;
	floatTip = window.createPopup();
	var d = floatTip.document;
	var contextPath = getContextPath();
	var url = "${request.contextPath}/packageName/goTODO.action";
	var queryPram = "staffId=" + staffId;
	var oPopBody = d.body;
	var myAjax = new Ajax.Request(url, {method:"post", parameters:queryPram, 
	         onComplete:function showResponse(res) {
				        oPopBody.innerHTML = res.responseText;
	           }});
	var oStyleSheet = d.createStyleSheet();
	oStyleSheet.addImport("${request.contextPath}/resources/default/css/main.css");
	floatTip.show(xpx, ypx, width, height, document.body);
	}
	catch (e) {
	}
}   
   
   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值