前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2学习---简单的数据校验、访问Web元素 1.简单的数据校验访问Web元素

Struts2学习---简单的数据校验、访问Web元素 1.简单的数据校验访问Web元素

作者头像
MindMrWang
发布2018-04-16 16:08:57
8920
发布2018-04-16 16:08:57
举报
文章被收录于专栏:Java学习之路Java学习之路

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();
    }
    
}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简单的数据校验
  • 访问Web元素
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档