【Struts2框架】第四节Struts标签-通用标签简述与常用标签大例子

一.通用标签简述

1.通用标签

   a)property
   b)set
     i.默认为action scope,会将值放入request和ActionContext中
     ii.page、request、session、appliaction
   c)bean
   d)include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
   e)param
   f)debug
2.控制标签
   a)if elseif else
   b)iterator
      i.collections map enumeration iterator array
   c) subset//截取一个集合的一部分
3.UI标签
   a)theme
      i.simple xhtml(默认)css xhtml ajax
4.AJAX标签
   a)补充
5.$#%的区别
   a) $用于i18n和struts配置文件
   b) #取得ActionContext的值
   c) %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

     i.参考<s:property>和<s:include>

include标签

<li>include _include1.html 包含静态英文文件</li>
<s:include value="/_include1.html"></s:include>
<li>include _include2.html 包含静态中文文件</li>
<s:include value="/_include2.html"></s:include>
<li>include _include1.html 包含静态英文文件,说明%的用法
<s:set name="incPage" value=" '/_include1.html' "/>
<s:include value="%{#incPage}"></s:include>
</li>

上面代码自己运行体会一下

二.常用标签大例子

下面这个样例几乎涵盖了全部的struts常用标签

struts.xml:

<package name="test" namespace="/javaee" extends="struts-default">
   <action name="tags" class="cn.edu.hpu.action.TagsAction">
       <result>/tags.jsp</result>
   </action>
</package> 

TagsAction.java:

package cn.edu.hpu.action;

import com.opensymphony.xwork2.ActionSupport;

public class TagsAction extends ActionSupport {

	private String username;
	private String password;

	public TagsAction(){

	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		this.addFieldError("fielderror.test","wrong!");
		// TODO Auto-generated method stub
		return super.execute();
	}

}

Dog.java:

package cn.edu.hpu.mode;

public class Dog {

	private String name;

	public Dog(){

	}

	public Dog(String name){
		super();
		this.name=name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "dog:"+name;
	}
}

链接:

<body>
    访问各种标签:<br/>
    属性访问:
<a href="<%=basePath%>javaee/tags.action?username=u&&password=123&age=9&age=31">Tags</a>
  </body>

结果页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'tags.jsp' starting page</title>
  </head>

  <body>
    <ol>
      <li>property:<s:property value="username"/></li>
      <!--s:property中value的值会解析成对象,加单引号说明是一个字符串对象-->
      <li>property 取值为字符串:<s:property value="'username'"/></li>
      <!--取到了,就用取到的值,取不到就用默认值default-->
      <li>property 设定默认值:<s:property value="admin" default="管理员"/></li>
      <!--escape默认为true,如果为false,就会把双引号里面的当成html语句-->
      <li>property 设定HTML:<s:property value="'<hr/>'" escape="false"/></li>  

      <hr/>
      <!--set在换名的时候用得比较多(有些名字比较长的)-->
      <!--若不设定范围,adminName的值会同时放到request和ActionContext里-->
      <li>set 设定adminName值(默认为request和ActionContext)-><s:set var="adminName" value="username"/></li>
      <li>set 从request取值:<s:property value="#request.adminName"/></li>
      <li>set 从ActionContext取值:<s:property value="#adminName"/></li>
      <!--scope="page":只在当前页面有效-->
      <li>set 设定范围 -><s:set name="adminPassword" value="password" scope="page"/></li>
      <li>set 从相应范围取值:<%=pageContext.getAttribute("adminPassword")%></li>
      <li>set 设定var,范围为ActionContext -><s:set var="adminPassword" value="password" scope="session"/></li>
      <!--若指定范围(scope)用#取不到值-->
      <li>set 使用#取值:<s:property value="#adminPassword"/></li>
      <!--[Debug]栈值里能看到:session	{adminPassword=123}-->
      <li>set 从相应范围取值:<s:property value="#session.adminPassword"/></li> 

      <hr/>
      <li>bean 定义bean,并使用param来设定新的属性值:
      <!--在开始的时候会new这个对象,把它放进栈顶-->
      		<s:bean name="cn.edu.hpu.mode.Dog" var="MyDog">
      		    <!--设置javaBean的初始值-->
                <s:param name="name" value="'dagou'"></s:param>
                <!--从值栈中取出name的值-->
                <s:property value="name"/>
            </s:bean>
            <!--s:bean结束后就从栈顶清除了,如果想在访问其中的值,
            就把bean设置到var里(var="MyDog"),这个值就会存到ActionContext里面,
            在其他地方也可以#出来-->
            <!--从ActionContext中取出name的值-->|
                <s:property value="#MyDog.name"/>
                <!--[Debug]在ActionContext里可以看到MyDog	dog:dagou-->
      </li>

      <hr/>
      <li>if elseif else:
      <!-- parameters(在ActionContext中)装了我们所有传进来的参数 -->
      age=<s:property value="#parameters.age" /><br/>
      <!--前面说过的用set简化名字-->
      <s:set var="age0" value="#parameters.age[0]"/>
      <s:if test="#age0<0">wrong age!</s:if>
      <s:elseif test="#age0<20">too young!</s:elseif>
      <s:else>yeah!</s:else><br/>

      <s:if test="#parameters.aaa == null">null</s:if>
      </li>

      <hr/>
      <li>遍历集合:<br/>
      <s:iterator value="{1,2,3}">
      <!--s:property会拿出所有元素-->
      <s:property/> |
      </s:iterator>
      </li>
      <li>自定义变量:<br/>
      <!--记住,凡是在var里的东西,都放在Context里了-->
      <s:iterator value="{'aaa','bbb','ccc'}" var="x">
         <s:property value="#x.toUpperCase()"/> |
      </s:iterator>
      </li>
      <li>使用status:<br/>
      <!--status状态,记录着每次循环到现在的状态是什么-->
      <s:iterator value="{'aaa','bbb','ccc'}" status="status">
          <s:property/> |
          	遍利过的元素总数:<s:property value="#status.count"/> |
          	遍历过的元素索引:<s:property value="#status.index"/> |
          	当前是奇数?<s:property value="#status.odd"/> |
          	当前是偶数?<s:property value="#status.even"/> |
          	是第一个元素吗?<s:property value="#status.first"/> |
          	是最后一个元素吗?<s:property value="#status.last"/>
          	<br/>
      </s:iterator>
      </li>

      <hr/>
      	遍历MAP:<br/>
      <li>
      <s:iterator value="#{1:'a',2:'b',3:'c'}">
      	<s:property value="key"/> | <s:property value="value"/><br/>
      </s:iterator>
      </li>

      <li>
       <s:iterator value="#{1:'a',2:'b',3:'c'}" var="y">
      	<s:property value="#y.key"/> | <s:property value="#y.value"/><br/>
      </s:iterator>
      </li>

      <li>

      </li>
      <s:debug></s:debug>
    </ol>
  </body>
</html>

结果:
property:u
property 取值为字符串:username
property 设定默认值:管理员
property 设定HTML:
_____________________________________________________
_____________________________________________________
set 设定adminName值(默认为request和ActionContext)->
set 从request取值:u
set 从ActionContext取值:u
set 设定范围 ->
set 从相应范围取值:123
_____________________________________________________
set 设定var,范围为ActionContext ->
set 使用#取值:
set 从相应范围取值:123
bean 定义bean,并使用param来设定新的属性值: dagou | dagou
_____________________________________________________

if elseif else: age=9, 31
too young! 
null
_____________________________________________________
遍历集合:
1 | 2 | 3 |
自定义变量:
AAA | BBB | CCC |
使用status:
aaa | 遍利过的元素总数:1 | 遍历过的元素索引:0 | 当前是奇数?true | 当前是偶数?false | 是第一个元素吗?true | 是最后一个元素吗?false 
bbb | 遍利过的元素总数:2 | 遍历过的元素索引:1 | 当前是奇数?false | 当前是偶数?true | 是第一个元素吗?false | 是最后一个元素吗?false 
ccc | 遍利过的元素总数:3 | 遍历过的元素索引:2 | 当前是奇数?true | 当前是偶数?false | 是第一个元素吗?false | 是最后一个元素吗?true 
______________________________________________________
遍历MAP:
1 | a
2 | b
3 | c

1 | a
2 | b
3 | c

转载请注明出处:http://blog.csdn.net/acmman/article/details/47085811

时间: 2024-12-21 03:40:55

【Struts2框架】第四节Struts标签-通用标签简述与常用标签大例子的相关文章

【Struts2框架】第二节Result-Global_Results_全局结果集

Global_Results_全局结果集,定义了一个大家都可以使用的结果集. 例子: <package name="test" namespace="/javaee" extends="struts-default"> <!-- 同一个package中的Action都可以直接用 --> <global-results> <result name="mainpage">/Hello

【Struts2框架】第二节Result-向结果传参数

重定向需要传值的原因就是栈值不共享 struts.xml: <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="result2" class="cn.edu.hpu.action.ResultAction2"> <result type="redirect

详解Java的Struts2框架的结构及其数据转移方式_java

Struts2的结构 1.为什么要使用框架? (1)框架自动完成了很多琐屑的任务 对于Struts2来说,它帮助我们方便地完成了数据类型转换.数据验证.国际化等等 Web开发中常见的任务.还有Spring中大量使用的Template模式,都是在让我们的开发 过程更加自动化.智能化.使用框架就是避免重新发明轮子,重新复制这些模板代码. 框架让我们将精力更多地放在更高级别的问题上,而不是常见工作流和基础任务上. (2)使用框架就是优雅地继承了框架背后的架构 框架背后的架构通常定义了一系列的工作流程,

MyBatis常用标签大全_java

_parameter _parameter 表示当前传入的参数,如果查询的时候传入的参数只有一个,则使用 _parameter E getById(Integer id); <select id="getById" parameterType="int" resultMap="BaseResultMap"> SELECT * FROM 库名.表名 WHERE id = #{_parameter} </select> if判

通向架构师的道路(第二十二天)万能框架spring(四)使用struts2

一.前言 SSH有了,现在我们要把我们的struts层从原来的1.3替换成struts2.x,引入了struts2.0后我们会发觉我们的代码和框架的变化还是不小的 二.Struts2的好处 1)在struts2的方法里,一切变量是线程安全的,而原有的struts1不是的; 2)在struts2中如果你声明了如下这样的代码:     privater String studentName=""; public void setStudentName(String studentName)

Struts2框架学习之五:通用标签详解

前言 Struts2框架为我们提供了很多标签,这些标签总体上可以分为两类:通用标签和UI标签.而较常使用的又是通用标签,所以文章的内容也是围绕通用标签展开的.通用标签分为两类:数据标签和控制标签.数据标签用于访问值栈中数据,控制标签用于控制呈现页面时数据执行流程.如果需要使用Struts 2框架的标签库,需要在页面的首部引入以下代码:<%@ taglib uri="/struts-tags" prefix="s"%>下面将分别对这两种标签进行说明. 数据

struts action取数-Java Struts2 框架页面传参问题

问题描述 Java Struts2 框架页面传参问题 strut2 中 可以在action中 将页面参数封装成对象 如果我的对象包括属性对象 的集合(List) 要怎么配置才能自动封装呢 解决方案 把页面参数封装成对象,这是有限制的.一般只能封装成含有基本数据类型属性的对象,集合类型需要自己去单独处理. 解决方案二: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传的值呢 谢谢 解决方案三: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传

Struts2框架,s:form表单标签使用theme=&amp;amp;quot;ajax&amp;amp;quot;报错

问题描述 Struts2框架,s:form表单标签使用theme="ajax"报错 已经导入struts2-dojo-plugin-2.3.24.1.jar,jsp页面如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//

【Struts2框架】第六节拦截器-拦截器的几个小实例

在看拦截器的小例子的前我们先来看看sturts2的原理 struts2自己是有拦截器的,通过拦截器可以拦截用户请求,并作出处理 拦截器作用有很多,譬如: 1.Action里面有个属性,这个属性我想在action执行之前改成别的值,可以用拦截器解决. 2.比如每个人执行action之前,我可以查看他们有没有这个权限执行这个action. 如果不设置拦截器,你要在每种action方法之前设置判定程序,非常繁琐. 拦截器interceptor体现了一种编程理念,叫做AOP(面向切面编程) 实例1:使用