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标签
<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页面
<%@ 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文件
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值栈和类型转换。