struts2值栈与类型转换

OGNL的表达方式有四种:

1.使用圆点符号

        2.调用对象的方法

        3.结合Struts2标签使用

        4.表达式求值

下面主要讲解常用的使用圆点符号和结合Struts2标签:

      1.使用圆点符号

        代码实例:

         1)jsp页面代码

<body>
    <form action="login" method="post">
   	   姓名: <input name="u.name"><br>
   	   密码: <input name="u.pwd"><br>
   	   
   		<input type="submit"  value="提交">
   	</form>
  </body>

        2)建一个实体类User

 

 

package com.qhit.bean;

import java.util.Date;

public class User {
	private String name;
	private String pwd;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
}

        3)创建action类LoginAction

 

 

package com.qhit.action;

import com.opensymphony.xwork2.ActionContext;
import com.qhit.bean.User;

public class LoginAction {
	private User u;
	
	public String login(){
		String name = u.getName();
		String pwd = u.getPwd();
		
		if("zhangsan".equals(name) && "123".equals(pwd)){
			ActionContext.getContext().getSession().put("user", u);
			return "success";
		}else{
			return "error";
		}
	}

	public User getU() {
		return u;
	}
	public void setU(User u) {
		this.u = u;
	}
}

      4)在Struts.xml中配置action类

 

 

<action name="login" class="com.qhit.action.LoginAction" method="login">

			<result name="success">page/success.jsp</result>			
			<result name="error">page/error.jsp</result>			
</action>

      5)在page文件下创建success.jsp页面使用圆点符号的OGNL表达式

 

 

<body>
    This is success page. <br>
  	  姓名:${u.name } 密码:${u.pwd }<!--此处使用了ognl的表达式的圆点符号方式  -->
  </body>

     6) 部署运行即可得到登录名和密码

 

    2.使用Struts2标签

        代码示例
        1)登录代码
 <body>
    <form action="login" method="post">
   	   姓名: <input name="u.name"><br>
   	   密码: <input name="u.pwd"><br>
   	   出生日期:<input name="u.birth"><br>     
   		<input type="submit"  value="提交">
   	</form>
  </body>

        2)实体类User
package com.qhit.bean;

import java.util.Date;

public class User {
	private String name;
	private String pwd;
	private Date birth;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; }
}
 
         3)action类
package com.qhit.action;

import com.opensymphony.xwork2.ActionContext;
import com.qhit.bean.User;

public class LoginAction {
	private User u;
	
	public String login(){
		String name = u.getName();
		String pwd = u.getPwd();
		
		if("zhangsan".equals(name) && "123".equals(pwd)){
			ActionContext.getContext().getSession().put("user", u);
		}else if("birth".equals(name) && "123".equals(pwd)){
                     return "info"; 
                else{
                     return "error"
               }
              }
             public User getU() {return u;}
      public void setU(User u) {this.u = u;}
}

       4)Struts.xml配置
 
<action name="login" class="com.qhit.action.LoginAction" method="login">

			<result name="success">page/success.jsp</result>			
			<result name="error">page/error.jsp</result>
			<result name="info">page/info.jsp</result>
</action>

       5)page文件下的info.jsp页面
          首先要引入Struts2标签
<%@ taglib prefix="s" uri="/struts-tags" %>
         Struts2标签
<body>
	     姓名:<s:property value="u.name"/><br>
	   密码: <s:property value="u.pwd"/><br>
	  出生日期:  <s:property value="u.birth"/>
  </body>
      6) 部署运行即可得到姓名,密码,出生日期。
 

类型转换

Struts2内置的类型转换:

String和int、Integer

String和double、Double

String和Map、List

String和Date

String和boolean

String和char

Struts2自定义类型转换

在Struts2中提供了StrutsTypeConverter类来简化自定义类型转换的设计,这个类有两个抽象方法需要实现:

(1) public Object convertFromString(Map context, String[] values, Class toClass) ;

          用于String类型数据转成自定义类型的处理方法参数:

             context  --- 与Action有关的上下文信息

             values   --- 从请求中获取的参数值

             toClass --- 要转换的目标类型

public String convertToString(Map context, Object obj) ;

           用于自定义类型转换成String

      参数:

         context  --- 与Action有关的上下文信息

         obj --- 自定义类型对象

这里讲一下string和date

   1.组件级别(仅供练习使用)

        1)新建转换器类

package com.qhit.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class DateTypeConterver extends StrutsTypeConverter {
	/* 
	 * 把指定日期格式的字符串转出日期类型   将提交的String类型的日期转换成date类型的日期   输入
	 * arg0 --与Action有关的上下文信息
	 * arg1--从请求中获取的参数值
	 * arg2--要转换的目标类型
	 * */
	@Override
	public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date = sdf.parse(arg1[0]);
			return date;
		} catch (ParseException e) {
			System.out.println("日期转换错误");
			e.printStackTrace();
			return null;
		}
	}
	/* 
	 * 把日期类型的值转出指定日期格式的字符串格式   将date类型的日期转换成string类型的日期  输出
	 * arg0 --与Action有关的上下文信息
	 * arg1--自定义类型对象
	 * 
	 * */
	@Override
	public String convertToString(Map arg0, Object arg1) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String date = sdf.format(arg1);
		return date;
	}

}

         2)新建properties文件

          1. 注意位置
          
 

          2.文件里的代码

 

         

birth=com.qhit.converter.DateTypeConterver

    birth为User的属性,等号后面的是转换器的路径

 

          3,再加上上面Struts2标签代码部署运行即可,此时只能输入"yyyy-MM-dd"格式的日期


 2.全局级别(实际开发可使用)

      只需改一下properties配置文件即可

        1)位置,与struts.xml同一级别在src下

             

     2)文件名称不能变,是固定的

           文件里的代码

 

java.util.Date=com.qhit.converter.DateTypeConterver


         

 

     3)部署运行即可

 

以上就是我所学的Struts2值栈和类型转换。

           

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值