1.简单的数据校验

在action里面我们已经给出了一个数据校验:

public String execute() {
if(user.getUsername().equals("username")&&user.getPassword().equals("password")) {
return SUCCESS;
}
return ERROR;
}

这里是action的传送门

上面代码大概就是如果用户名为“username”,并且密码为“password”的将返回success指定的页面(由action里面的result的属性name指定),否则返回error指定的页面。这是我们人为的指定错误页面。struts也提供给我们它处理错误的方式:

public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
return ERROR;
}
return SUCCESS;
}

addFieldError这个方法是ActionSupport里面定义的方法,下面是它的源码:

 public void addFieldError(String fieldName, String errorMessage) {
validationAware.addFieldError(fieldName, errorMessage);
}

同样如果调用这个方法,那么我们添加的这个错误将被添加到值栈(valueStack)中。

我们可以用下面的这段页面代码将我们设置的错误取出来(这里用到的是struts标签):

    User Add Error!
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>

访问Web元素

一共四种方法:

①ActionContext

关于ActionContext的源码分析,由于本人才疏学浅仅仅能自己读个大概,所以这里就贴一下我转发的别人的一篇关于ActionContext的介绍:

http://blog.csdn.net/qq_39266910/article/details/78504728

<!--这个是获取页面 ,在这个页面里面我们既可以使用传统的request.getAttribute,也可以使用struts为我们提供的标签<s:property value="#封装的Web元素.Mapkey"/> 里面还封装了一个attr,可以泛指所有的属性。-->
<body>
<s:property value="#request.req"/>||<%=request.getAttribute("req")%><br>
<s:property value="#request.req"/>||<%=session.getAttribute("sess")%><br>
<s:property value="#request.req"/>||<%=application.getAttribute("app")%><br>
</body>
//这个是Action类
public class userAction extends ActionSupport {
Map request;
Map session;
Map application; public userAction() {
request=(Map)ActionContext.getContext().get("request");
session=(Map)ActionContext.getContext().getSession();
application=(Map)ActionContext.getContext().getApplication(); } public String execute() {
request.put("req", "req1");
session.put("sess", "sess1");
application.put("app", "app1");
return SUCCESS;
}
}

struts帮我们以Map的形式封装了httpServletRequset,HttpSession,application,等一些我们无法再Action里面直接用到的这些Web参数。

②下面我们来看看另一种:

public class userAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {

	private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application; public String execute() {
request.put("req", "req1");
session.put("sess", "sess1");
application.put("app", "app1");
return SUCCESS;
} @Override
public void setRequest(Map<String, Object> request) {
this.request = request;
} @Override
public void setSession(Map<String, Object> session) {
this.session = session;
} @Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
}

这种方法实现 了几个接口:RequestAware,SessionAware, ApplicationAware,struts容器在运行的时候会判断当前的Action实例是否实现这些接口,如果实现了这些接口,那么那么容器接着调用set方法方法,然后将request/session/application这些web元素赋值给我们自定义的request,最后我们在execute方法中进行赋值。

还有其他两种方法但是不常用,我们只把代码贴出来仅供参考:

public class LoginAction3 extends ActionSupport {

	private HttpServletRequest request;
private HttpSession session;
private ServletContext application; public LoginAction3() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
} public String execute() {
request.put("req", "req1");
session.put("sess", "sess1");
application.put("app", "app1");
return SUCCESS;
} }

public class LoginAction4 extends ActionSupport implements ServletRequestAware {

	private HttpServletRequest request;
private HttpSession session;
private ServletContext application; public String execute() {
request.put("req", "req1");
session.put("sess", "sess1");
application.put("app", "app1");
return SUCCESS;
} @Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
} }

上面的四种方法第二种是最常用的,也是最重要的。

Struts2学习---简单的数据校验、访问Web元素的更多相关文章

  1. Struts2学习笔记(九)——数据校验

    Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验 自动校验(配置校验) :XML配置校验(主流) 和 注 ...

  2. Struts2 访问web元素

    访问web元素的四种方法(耦合,依赖注入).(耦合,非依赖注入).(非耦合,依赖注入).(非耦合,非依赖注入) 耦合:可以得到HttpServletResponse,HttpServletReques ...

  3. Struts2中访问web元素的四种方式

    Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...

  4. 01_12_Struts2_访问Web元素

    01_12_Struts2_访问Web元素 1. 配置struts.xml文件 <package name="login" namespace="/login&qu ...

  5. struts2学习笔记--使用Validator校验数据

    我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...

  6. struts2简单入门-数据校验

    数据校验流程 校验数据的方式 重写execute方法在内部写校验代码 public class LoginAdminAction extends ActionSupport { private Use ...

  7. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  8. Symfony2学习笔记之数据校验

    校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验 ...

  9. Struts2访问web元素的各种方法

    1.通过RequestAware,SessionAware,ApplicationAware获取: 在Struts2中不能直接访问Request,Session,Application元素,但是可以使 ...

随机推荐

  1. 隐藏17年的Office远程代码执行漏洞(CVE-2017-11882)

    Preface 这几天关于Office的一个远程代码执行漏洞很流行,昨天也有朋友发了相关信息,于是想复现一下看看,复现过程也比较简单,主要是简单记录下. 利用脚本Github传送地址 ,后面的参考链接 ...

  2. [Python]循环嵌套nested loop-练习题

    [python的for循环嵌套打印如下图形] 图形一: ******* ******* ******* ******* 图形二: * *** ***** ******* 图形三: * *** **** ...

  3. 手 Q 人脸识别动画实现详解

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 前言 开门见山,先来看下效果吧. 看到这么酷炫的效果图,不得不赞叹一下我们的设计师.然而,站在程序员的角度上看,除了酷炫之外更多的是复杂.但是 ...

  4. JAVA基础面试(五)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系?        hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hash ...

  5. GacUtil

    编辑本段工具简介 全局程序集缓存工具 (Gacutil.exe) 管理程序集缓存的 .NET 实用工具库还提供一种命令行接口工具,名为全局程序集缓存实用工具 (Gacutil.exe). 编辑本段命令 ...

  6. memcached内存管理

    前言 memcached默认情况下采用了名为Slab Allocator的机制来管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的.但是,这种方式会导致内存 ...

  7. 写一段PHP代码,确保多个进程同时写入同一个文件成功(腾讯)

       

  8. PHP基础知识点

    //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH变量名建议用 ...

  9. codeforge免费下载账号 积分账号 共享账号

    codeforge网站下载代码很好,没有积分怎么办?那么多好的matlab代码,matlab程序,C,JAVA等等,都要充值啊!!! 请用下面共享的codeforge账号密码========> ...

  10. Vue 浅谈前端js框架vue

    Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...