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))的更多相关文章

  1. Struts_OGNL(Object Graph Navigation Language) 对象图导航语言

    1.访问值栈中的action的普通属性: 请求: <a href="ognl.action?username=u&password=p">访问属性</a& ...

  2. 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 ...

  3. 应用于Java中的一个开源的表达式语言(Expression Language)

    OGNL(英文全称:Object Graph Navigation Language,中文名:对象导航图语言)是应用于Java中的一个开源的表达式语言(Expression Language),它被集 ...

  4. java三大框架——Struts + Hibernate + Spring

    Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...

  5. Java 权限框架 Shiro 实战二:与spring集成、filter机制

    转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...

  6. JAVA web 框架集合

    “框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...

  7. Struts框架的核心业务

    Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...

  8. (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

    转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml)   根据输入 ...

  9. Struts框架2ActionError类 内部资料 请勿转载 谢谢合作

    ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...

随机推荐

  1. Ubuntu下查看so文件的函数列表

    Ubuntu下查看so文件的函数列表   可使用如下命令: 1.nm -D XXX.so 2.objdump -tT  XXX.so   nm libcyusb.so | grep "usb ...

  2. 清北学堂dp图论营游记day4

    依然zhx讲. 讲了概率与期望: 期望:事件结果的平均大小.记作E(x). E(x)=每种结果的大小与其概率的乘积的和. 例如,记掷一枚骰子的点数为x E(x)=1*(1/6)+2*(1/6)+3*( ...

  3. C语言结构体初始化的四种方法

    定义 struct InitMember{    int first:    double second:    char* third:    float four;}; 方法一:定义时赋值 str ...

  4. loj2589 「NOIP2009」Hankson 的趣味题

    对于质因数分解理解还不到位. 此题可知$lcm$是$x$的倍数,$x$是$lcm$的约数,只要在$lcm$的分解质因数里对每一个质因子讨论种数即可. 具体来说,对于$lcm$的一个质因子$p$,讨论$ ...

  5. redis集群搭建及java(jedis)链接

    1.创建一个redis-cluster 目录 mkdir -p /usr/local/redis-cluster 创建6台redis服务器(单机下学习) mkdir 7001.mkdir 7002.m ...

  6. 微信里关闭窗口 js

    需要在微信中关闭页面窗口,不过window.close()不管用,问过群里才知道微信有自带的方法能关闭窗口,记录一下(这个只针对微信有效哦): WeixinJSBridge.call('closeWi ...

  7. SVN各种错误提示产生原因及处理方法大全

    SVN各种错误提示产生原因及处理方法大全 SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal ...

  8. JZOJ5373【NOIP2017提高A组模拟9.17】信仰是为了虚无之人

    题目 分析 我们发现,如果[l,r]的异或和为k是真要求,有且仅当不存在[l,i]和[i,r]两个区间的异或和不为k. 我们用带权并查集了维护这些,但是,由于区间不连续,我们将点权移到边上,对于区间[ ...

  9. Pandas的常见使用方法操作

    Series Series是一种类似于一维数组的 对象,由一组数据(各种NumPy数据类型)以及一组与之对应的索引(数据标签)组成. 类似一维数组的对象由数据和索引组成索引(index)在左,数据(v ...

  10. 自定义 Swiper 的pageControl

    .part5-bg .swiper2 .swiper-pagination2{ bottom: 0.4rem; } /*未选中的小圆点样式*/ .part5-bg .swiper2 .swiper-p ...