博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2常用标签
阅读量:7089 次
发布时间:2019-06-28

本文共 13823 字,大约阅读时间需要 46 分钟。


 property标签

  •property标签用于输出值栈中的对象的属性值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。
 

属性如下:

例子:

取出栈顶对象(通常是action)的username 属性并输出,如果没有找到username属性,那么输出“游客”。

详细例子:

 

package com.struts;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.entity.Users;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 控制器类 * 作用:处理客户端的请求 * @author asus * */public class PropertyAction extends ActionSupport {    /** 成员变量:值栈中属性 */    private Users user;        /** 重写execute方法 */    public String execute(){        /** 给成员变量赋值 */        user= new Users();         user.setName("admin");        user.setPassword("q12345");                /** 局部变量:非值栈中属性 */        Users userTow=user;        String amp="&";        String str="ABCD";        String num="1";        List
list=new ArrayList
();//集合中装了两个对象 list.add(user); list.add(userTow); /** 将局部变量存入request范围里 */ Map
request=(Map
) ActionContext.getContext().get("request"); request.put("userTow", userTow); request.put("amp", amp); request.put("str", str); request.put("num", num); request.put("list", list); return SUCCESS; } /** JavaBean */ public Users getUser() { return user; } public void setUser(Users user) { this.user = user; } }
Action 控制器类

 

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

结果页面

结果1:
结果2:
结果3:
hearts;
结果4:
hearts;
结果5:
结果6:
结果7:
结果8:
结果9:
结果10:
JSP结果页面

 

例子页面输出结果:

 

 

 


set标签

  •Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是:
      –提升了性能(表达式的计算只有一次)
      –提高了代码的可读性。
 

属性如下:

例子:

将p放入默认范围内
将p放入application范围内。
将p放入session范围内。
${sessionScope.test.name}
${sessionScope.test.age}

详细例子:

 

package com.struts;import com.entity.Users;import com.opensymphony.xwork2.ActionSupport;/** * 控制器类 * 作用:处理客户端的请求 * @author asus * */public class SetAction extends ActionSupport {    /** 成员变量:值栈中属性 */    private Users user;        /** 重写execute方法 */    public String execute(){        /** 给成员变量赋值 */        user = new Users();        user.setName("admin");                return SUCCESS;    }        /** JavaBean */    public Users getUser() {        return user;    }    public void setUser(Users user) {        this.user = user;    }    }
Action 控制器类

 

<%@ taglib uri="/struts-tags" prefix="s"%>            

set标签

将Action中成员属性:user.name的值保存到默认范围中,即Stack Context(application)

当指定范围类型application

小结:set标签默认范围是application。 当刻意去指定范围为application时,虽然范围相同,但他们取值方式又有略微不同。

共通点:都可以使用attr
区别:
1)默认不指定范围的方式,取值可以不加范围标志,不能使用application范围标志打点取值。
2)指定application的方式,取值必须要加范围标志,但可以使用application范围标志打点取值。

JSP结果页面

 

例子页面输出结果:

 


push标签 

  •push标签用于把一个值压入值栈(位于栈顶),注意和set标签的区别,set标签是将值放到action上下文中。当push标签结束后,push标签放入值栈中的对象将被删除,换句话说,要访问push标签压入栈中的对象,需要在标签内部去访问。
 
属性如下:
 
 
    

详细例子:

 

package com.struts;import com.entity.Users;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 控制器类 * 作用:处理用户的请求 * @author asus * */public class PushAction extends ActionSupport {    /** 成员变量:值栈中属性 */    private Users user;        /** 重写execute方法 */    public String execute(){        user=new Users();        user.setName("固执的雨");        user.setAge(15);        user.setSex("女");                //存入session会话范围        ActionContext.getContext().getSession().put("user", user);                return SUCCESS;    }        /** JavaBean */    public Users getUser() {        return user;    }    public void setUser(Users user) {        this.user = user;    }    }
Action 控制器类

 

<%@ taglib uri="/struts-tags" prefix="s"%>            

push标签

普通方式访问

姓名:
年龄:
性别:

使用push标签后简化的访问方式

姓名:
年龄:
性别:
JSP结果页面

 

例子页面输出结果:


 

include标签
  •include标签类似于JSP的<jsp:include>标签,用于包含一个Servlet或JSP页面。include标签的标签体内可以包含多个param标签,用于向被包含的页面传递请求参数。
 
属性如下:

例子:

使用s:include标签来包含目标页面

被包含的页面仅使用表达式语言输出author参数,被包含页面的代码如下:

被包含的页面

${param.author}

详细例子:

        

使用include标签包含(引用)jsp1.jsp

使用include标签包含(引用)jsp2.jsp,使用嵌套的param标签向jsp2.jsp传递参数

JSP结果页面
        欢迎访问jsp1.jsp页面!    
jsp1.jsp
        欢迎访问jsp2.jsp页面!        
姓名:${param.name } 性别:${param.sex }
jsp2.jsp

例子页面输出结果:


date标签
  •date标签用于格式化输出日期值,也可用于输出当前日期值与指定日期值之间的时差
 
属性如下:
Ø注意:
Ø1、format属性用于指定日期的格式化样式,具体的样式规则可以参看java.text.SimpleDateFormat类的API文档。
Ø2、将nice属性设为true,可以输出指定日期值和当前日期值之间的时差,此时format属性失效,也就是说,当nice属性为true时,即使你指定了format属性,它也不会起作用
Ø3、如果没有使用nice属性,也没有指定format属性,那么date标签将会在国际化资源包中查找struts.date.format键,并以这个键的值作为日期的格式化样式;如果这个键
   不存在,那么默认将会使用DateFormat.MEDIUM格式化样式。
Ø4、如果找不到name属性指定的Date对象,那么将返回空。
 
•第一步
  •在ApplicationResources.properties文件中添加struts.date.format键
    struts.date.format=yyyy/MM/dd hh:mm:ss
 
•第二步
  •可以使用struts2的struts.custom.i18n.resources属性来设置默认的资源包,编辑struts.xml文件,使用constant元素来配置struts.custom.i18n.resources属性,
    内容如下:
 
•第三步

详细例子:

struts.date.format=yyyy/MM/dd hh\:mm\:ss
ApplicationResource.properties
struts.xml
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%@page import="java.util.Calendar"%> <% //获取当天指定点上的时间 Calendar calendar= Calendar.getInstance(); //通过calendar.set方法修改当前日期,将天数向后加10天 calendar.set(calendar.get(calendar.YEAR), calendar.get(calendar.MONTH), calendar.get(calendar.DATE) + 10); //存入application pageContext.setAttribute("futureDate",calendar.getTime()); %>

date标签

指定format="yyyy年MM月dd日"

没有使用format属性,指定nice="true",可以输出“获取到的日期值”和“现在的时间”之间的“时差”

没有使用format和nice属性,将以资源包中struts.date.format键的值作为格式化样式

date.jsp

例子页面输出结果:

 

 datetimepicker日期控件
第一步:添加DOJO.jar包

 

第二步:

<%@ taglib uri="/struts-dojo-tags" prefix="sx"%>

结果页面:

 


if/elseif/else标签
  •if/elseif标签属性test:为必填属性,是一个Boolean类型值,决定是否显示if标签内容。该标签标准格式如下:
 
……..
……..
………..

例子:

<%@ taglib uri="/struts-tags" prefix="s"%>

例子1

testname不是“Java”

 


 

 iterator(迭代标签)
  •描述:用于遍历集合(java.util.Collection)List,Map,数组或枚举值(java.util.iterator)。
 
该标签的属性如下表:
 
•int getCount():返回当前迭代过元素的总数。
•int getIndex():返回当前迭代元素的索引。
•boolean isEven():判断当前迭元素是否为偶数。
•boolean isOdd():判断当前迭元素是否为奇数。
•boolean isFirst():判断当前迭元素是否为第一个元素。
•boolean isLast():判断当前迭元素是否为最后一个元素
 
例子:
<%@ taglib uri="/struts-tags" prefix="s" %>

iterator迭代标签

迭代List,不使用status

迭代List,使用status

当前元素 当前迭代的元素的总数 当前迭代的元素的索引 判断当前迭代的元素是否是偶数 判断当前迭代的元素是否是奇数 判断当前迭代的元素是否是第一个元素 判断当前迭代的元素是否是最后一个元素

迭代Map,不使用status属性, \#{}是用来构造Map的写法

=

结果页面:


token标签(实现防止表单重复提交)
由于某些原因,用户在进行类似表单提交的操作后,以为表单未被提交,会进行多次的重复提交。为了避免用户多次提交给服务器带来负荷。我们会对表单提交这样的操作进行一些处理,以告诉用户不要重复提交。
 
第一步:使用<s:token></s:token>标签:
     登录页面中的关键技术就是使用了标签库中的<s:token></s:token>标签,
     它的作用就是在用户访问此页面时会生成一个sessionId,
     在提交时会服务器会据此验证表单是否已提交,
     提交到的Action便能配置TokenInterceptor拦截器验证表单是否重复提交。
 
第二步:配置XML文件
     <result name="success">/success.jsp</result>
     <result name="invalid.token">/error.jsp</result>
     <interceptor-ref name="token"></interceptor-ref>
     <interceptor-ref name="defaultStack"></interceptor-ref>
    此Action下,我们配置了token拦截器,另注意到在此Action下我们还配置了一个       “invalid.token”result,提交时服务器如果根据token标签产生的sessionId判断出表单已提交,
   它则返回invalid.token指向的视图。比如这里,如果重复提交则会转到.../error.jsp中去。
   另不要忘记了引入默认的拦截器栈。
 
<s:token />标签防止重复提交,用法如下:
第一步:在表单中加入<s:token />
 <s:form action="helloworld_other" method="post" namespace="/test">
    <s:textfield name="person.name"/>
    <s:token/>
    <s:submit/>
  </s:form>
 
第二步:
<action name="helloworld_*" class="com.action.HelloWorldAction" method="{1}">
       <result>ok.jsp</result>
       <result name="invalid.token">error.jsp</result>
        <interceptor-ref name="token"></interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>
</action>
 
详细例子(用户登录):
package com.entity;import java.util.Date;/** * 用户类 * @author asus * */public class Users {    /** 属性 */    private String name;    private String password;    private int age;    private String sex;    private Date birthday;        /** 构造方法 */    public Users() {        super();    }    public Users(String name, String password) {        super();        this.name = name;        this.password = password;    }        /** javaBean */    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    }
Users实体类
<%@ taglib uri="/struts-tags" prefix="s" %>          
用户名:
密码:
login.jsp
/s_token/success.jsp
/s_token/error.jsp
/s_token/success.jsp
struts.xml
package com.struts;import com.entity.Users;import com.opensymphony.xwork2.ActionSupport;/** * 控制器类 * 作用:处理用户的请求 * @author asus * */public class LoginAction extends ActionSupport {    /** 成员变量:值栈中属性 */    private Users user;        /** 重写execute方法 */    public String execute(){                System.out.println("请求Action进入execute()方法。。");//控制台测试,是否多次重复提交。                //验证登录        if(user!=null){            if(user.getName().equals("admin") && user.getPassword().equals("a123")){                return SUCCESS;            }        }                return SUCCESS;//只为掩饰效果,密码错误也会走成功页面    }        /** JavaBean */    public Users getUser() {        return user;    }    public void setUser(Users user) {        this.user = user;    }    }
LoginAction
        登陆成功进入此页面!  
success.jsp
        当表单重复提交时跳转到此页面!  
error.jsp

结果页面:

转载地址:http://btfql.baihongyu.com/

你可能感兴趣的文章
趣谈JavaScript中面向对象的this
查看>>
闲言碎语
查看>>
前端谈谈实现五子棋
查看>>
forEach map
查看>>
一步步教你Android反编译
查看>>
网络协议与分层体系结构
查看>>
苹果爸爸Bug之NSTextAttachment
查看>>
GPU编程(二): GPU架构了解一下!
查看>>
HBase核心知识点总结
查看>>
Django RESTFramework——更新数据 (5)
查看>>
iOS目录解析 彻底搞懂iOS App的目录结构
查看>>
深入浅出JDK动态代理(二)
查看>>
前端实现获取浏览器flash版本号
查看>>
Hybrid小技巧:通过js调用原生对话框(Android)
查看>>
日志服务Python消费组实战(二):实时分发数据
查看>>
从几道面试题看对象的初始化
查看>>
盛极而衰,互联网体育是伪风口还是真趋势?
查看>>
14-《ARKit by Tutorials》读书笔记1:开始入门
查看>>
[MetalKit]33-Ambient-Occlusion-in-Metal环境光遮蔽
查看>>
图解JavaScript算法排序
查看>>