java:struts框架5(Converter,Validation,Tags(Object-Graph Navigation Language))
1.Converter:
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="converterDemo" extends="struts-default">
<action name="point-*" class="cn.zzsxt.action.MyPointAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
Conversion:
package cn.zzsxt.conversion; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import cn.zzsxt.entity.MyPoint; public class MyPointConverter extends StrutsTypeConverter {
/**
* 10,20
* 将字符串转换为复合类型
* context:上下文
* values:参数的值
* toType:目标类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
if(toType==MyPoint.class){
String value = values[0];//获取坐标的值: 10,20
String[] arr = value.split(",");//arr = {"10,20"}
//获取x坐标的值
int x = Integer.parseInt(arr[0]);
int y = Integer.parseInt(arr[1]);
MyPoint myPoint = new MyPoint();
myPoint.setX(x);
myPoint.setY(y);
return myPoint;
}
return null;
}
/**
* 将复合类型转换为字符串
*/
@Override
public String convertToString(Map arg0, Object arg1) {
return null;
} }
action:
package cn.zzsxt.action; import com.opensymphony.xwork2.ActionSupport; import cn.zzsxt.entity.MyPoint; public class MyPointAction extends ActionSupport {
private MyPoint point; public MyPoint getPoint() {
return point;
} public void setPoint(MyPoint point) {
this.point = point;
} public String add() throws Exception {
System.out.println("执行了add方法,坐标为:"+point);
return this.SUCCESS;
}
}
action包下properties文件(简单类型):
point=cn.zzsxt.conversion.MyPointConverter
src下properties文件(复合类型):
cn.zzsxt.entity.MyPoint=cn.zzsxt.conversion.MyPointConverter
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head> <body>
<form action="point-add.action" method="post">
请输入坐标(x,y)<input type="text" name="point"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
success.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head> <body>
x=${point.x}<br>
y=${point.y}<br>
</body>
</html>
2.Validation(简单类型和复合类型验证,单一方法和全体方法验证(起名格式)):
validators声明文件这里找:
这里找验证规则:com.opensymphony.xwork2.validator.validators.default.xml
struts-2.3.32-all源文件\struts-2.3.32\docs\docs\index.html这里找学习指南:
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="validationDemo" extends="struts-default">
<action name="user-*-*" class="cn.zzsxt.action.UserAction" method="{1}">
<result name="success">/index.jsp</result>
<result name="input">/{2}.jsp</result> //此处 name=“input”固定写法不能更改,{2}灵活展现页面
</action> <action name="user2-*" class="cn.zzsxt.action.UserAction2" method="{1}">
<result name="success">/index.jsp</result>
<result name="input">/register2.jsp</result>
</action> </package>
</struts>
UserAction(简单类型):
package cn.zzsxt.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{
private String userName;
private String userPass;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
} /**
* 登陆
* @return
* @throws Exception
*/
public String doLogin() throws Exception {
System.out.println("执行了login方法....");
return this.SUCCESS;
} /**
* 注册
* @return
* @throws Exception
*/
public String doRegister() throws Exception {
System.out.println("执行了register方法,新增了用户:"+userName);
return this.SUCCESS;
} /**
* validateXxx方法:Xxx为需要校验的方法名
* 只针对Action中指定的方法进行校验。
*/
// public void validateDoregister() {
// //用户名不能为空,并且长度不能小于6位
// if(userName==null||userName.equals("")){
// this.addFieldError("userName", "用户名不能为空!");
// }
// if(userName.length()<6){
// this.addFieldError("userName", "用户名长度不能小于6位!");
// }
// //密码不能空,密码的长度等于6位
// if(userPass==null||userPass.equals("")){
// this.addFieldError("userPass", "密码不能为空!");
// }
// if(userPass.length()<6){
// this.addFieldError("userPass", "用户名长度不能等于6位!");
// }
// } /**
* validate()会真的该action中所有的方法进行校验
*/
// public void validate() {
// //用户名不能为空,并且长度不能小于6位
// if(userName==null||userName.equals("")){
// this.addFieldError("userName", "用户名不能为空!");
// }
// if(userName.length()<6){
// this.addFieldError("userName", "用户名长度不能小于6位!");
// }
// //密码不能空,密码的长度等于6位
// if(userPass==null||userPass.equals("")){
// this.addFieldError("userPass", "密码不能为空!");
// }
// if(userPass.length()<6){
// this.addFieldError("userPass", "用户名长度不能等于6位!");
// }
// }
}
action包下UserAction-validation.xml(简单类型验证):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="userName">
<!--字符串必填校验器 -->
<field-validator type="requiredstring">
<!-- 去掉前后空格 -->
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
<!-- 字符串长度校验器 -->
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>用户名长度必须在${minLength}和${maxLength}之间!</message>
</field-validator>
</field>
<field name="userPass">
<field-validator type="requiredstring">
<message>密码不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">6</param>
<message>密码长度必须是${minLength}位!</message>
</field-validator>
</field>
</validators>
action包下UserAction2-validation.xml(复合类型验证):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context">myContext</param>
<param name="appendPrefix">true</param>
<message>此处随便写?</message>
</field-validator>
</field>
</validators>
entity包下的User-myContext-validation.xml(复合类型验证):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="userName">
<field-validator type="requiredstring">
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="userPass">
<field-validator type="requiredstring">
<message>密码不能为空!</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年龄必须在${min}-${max}之间!</message>
</field-validator>
</field>
<field name="email">
<field-validator type="requiredstring">
<message>电子邮箱不能为空!</message>
</field-validator>
<field-validator type="email">
<message>电子邮件格式有误!</message>
</field-validator>
</field>
<field name="phone">
<field-validator type="regex">
<param name="regex"><![CDATA[^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$]]></param>
<message>手机号码有误!</message>
</field-validator>
</field>
</validators>
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>用户注册</title>
</head> <body>
<s:fielderror></s:fielderror>
<form action="user-doLogin-login.action" method="post">
用户名:<input type="text" name="userName"/><br>
密码:<input type="text" name="userPass"/><br>
<input type="submit" value="登录"/>
</form>
</body>
</html>
register.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>用户注册</title>
</head> <body>
<s:fielderror></s:fielderror>
<form action="user-doRegister-register.action" method="post">
用户名:<input type="text" name="userName"/><br>
密码:<input type="text" name="userPass"/><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
register2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>用户注册</title>
</head> <body>
<s:fielderror></s:fielderror>
<form action="user2-doRegister.action" method="post">
用户名:<input type="text" name="user.userName"/><br>
密码:<input type="text" name="user.userPass"/><br>
年龄:<input type="text" name="user.age"/><br>
电子邮箱:<input type="text" name="user.email"/><br>
手机:<input type="text" name="user.phone"/><br>
<input type="submit" value="注册"/>
</form>
</body>
</html>
3.Tags:(OGNL(Object-Graph Navigation Language对象图导航语言,类似EL表达式))
#paramters---------->request.getParameterValues("xx");
#request.name----->request.getAttribute("name");
#session.name----->session.getAttribute("name");
#application.name-->applocation.getAttribute("name");
.......
generic.jsp:
<%@ page language="java" import="java.util.*,cn.zzsxt.entity.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ui.jsp' starting page</title>
</head>
<body>
<%
int age=40;
request.setAttribute("age", age);
%>
if/elseif/else标签:
<s:if test="#request.age<18">
未成年!
</s:if>
<s:elseif test="#request.age>=18&&#request.age<=30">
青年!
</s:elseif>
<s:else>
老年!
</s:else>
<hr>
<%
List<User> list = new ArrayList<User>();
for(int i=0;i<5;i++){
User user = new User();
user.setUserId(i+1);
user.setUserName("username"+i);
user.setUserPass("userpass"+i);
list.add(user);
}
session.setAttribute("list", list);
%>
iterator标签:类似c标签库中forEach标签<br>
<s:iterator value="#session.list" var="user">
<%-- ${user.userId}***${user.userName}***${user.userPass}<br> --%>
<s:property value="#user.userId"/>---<s:property value="#user.userName"/>---<s:property value="#user.userPass"/><br>
</s:iterator>
<hr>
需求:奇数行显示红色,偶数行显示绿色<br>
<s:iterator value="#session.list" var="user" status="st">
<!-- 奇数行 -->
<s:if test="#st.index%2==0">
<font color="red">
<s:property value="#st.index"/>--<s:property value="#user.userId"/>---<s:property value="#user.userName"/>---<s:property value="#user.userPass"/><br>
</font>
</s:if>
<s:else>
<font color="green">
<s:property value="#st.index"/>--<s:property value="#user.userId"/>---<s:property value="#user.userName"/>---<s:property value="#user.userPass"/><br>
</font>
</s:else>
</s:iterator>
<hr>
<%
Date now = new Date();
application.setAttribute("now", now);
%>
date标签:对日期处理<br>
<s:date name="#application.now" format="yyyy年MM月dd日 HH:mm:ss"/>
</body>
</html>
ui.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ui.jsp' starting page</title>
</head>
<body>
<s:form action="user-doRegister" method="post">
<s:textfield name="user.userName" label="用户名"></s:textfield>
<s:password name="user.userPass" label="密码"></s:password>
<s:radio list="{'男','女'}" name="user.sex" label="性别(使用OGNL动态构建List)"></s:radio>
<s:radio list="#{1:'男',0:'女'}" name="user.sex2" label="性别(使用OGNL动态构建Map)"></s:radio>
<s:checkboxlist list="{'吃饭','睡觉','打豆豆'}" name="user.loves" label="爱好(List)"></s:checkboxlist>
<s:checkboxlist list="#{1:'吃饭',2:'睡觉',3:'打豆豆'}" name="user.loves2" label="爱好(Map)"></s:checkboxlist>
<s:select list="{'JAVA1','JAVA2'}" name="user.clazz" label="班级(List)"></s:select>
<s:select list="#{1:'JAVA1',2:'JAVA2'}" name="user.clazz2" label="班级(Map)"></s:select>
<s:textarea name="user.note" label="个人说明" cols="40" rows="4"></s:textarea>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
java:struts框架5(Converter,Validation,Tags(Object-Graph Navigation Language))的更多相关文章
- Struts_OGNL(Object Graph Navigation Language) 对象图导航语言
1.访问值栈中的action的普通属性: 请求: <a href="ognl.action?username=u&password=p">访问属性</a& ...
- Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis
https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...
- 应用于Java中的一个开源的表达式语言(Expression Language)
OGNL(英文全称:Object Graph Navigation Language,中文名:对象导航图语言)是应用于Java中的一个开源的表达式语言(Expression Language),它被集 ...
- java三大框架——Struts + Hibernate + Spring
Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- Struts框架的核心业务
Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...
- (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)
转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入 ...
- Struts框架2ActionError类 内部资料 请勿转载 谢谢合作
ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...
随机推荐
- 利用JQuery一步步打造无缝滚动新闻
首先,我们这里有这么一段html代码,很简洁,如下所示: 1 <div id="tag">2 <ul>3 <li>你说我是好人吗,我是好人啊&l ...
- 关于sparksql
1.读取json文件,并且进行查询等操作 所使用的jar包为 json文件内容 { "id":1 ,"name":" Ella"," ...
- 使用pdo,使用pdo无法插入数据怎么办
如果你使用了最新版的XAMPP,那么你几乎不用改变php.ini的设置,就可以使用pdo but,插了一晚上,程序既不报错也不插入数据,真是气死人,后来发现是实例化pdo对象的时候没有指定字符集.所以 ...
- dispatchEvent 自定义触发事件,常用于自定义鼠标事件或点击事件
自定义事件的触发又是不可避免的,由于浏览器兼容性问题,我们要分开说了,针对标准浏览器和IE6/7等考古浏览器. 1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEve ...
- jquery visible 选择器 语法
jquery visible 选择器 语法 作用::visible 选择器选取每个当前是可见的元素.除以下几种情况之外的元素即是可见元素:设置为 display:none type="h ...
- HTML+CSS知识总结1
一.浏览器页面页面由结构层(html)表现层(css)行为层(js)组成 二.DOCTYPE作用是用来告知浏览器以何种模式渲染文档. 三.严格模式是指浏览器按照W3C标准解析代码,混杂模式又称怪异模式 ...
- react-router中,<switch>
有<Switch>标签,则其中的<Route>在路径相同的情况下,只匹配第一个,这个可以避免重复匹配: 无<Switch>标签,则其中的<Route>在 ...
- poj 3685 Matrix 二分套二分 经典题型
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 5724 Accepted: 1606 Descriptio ...
- cogs157. [USACO Nov07] 奶牛跨栏 x
157. [USACO Nov07] 奶牛跨栏 ★★ 输入文件:hurdles.in 输出文件:hurdles.out 简单对比时间限制:1 s 内存限制:128 MB 译 by Cm ...
- 【Python】PIL模块
Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...