一,使用Struts2标签库简化表单

在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp

 <%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <body>
<center>
<h3>用户登录</h3>
9 <%-- 登录表单,提交到login.action --%>
10 <s:form action="userlogin">
11 <%--用户名输入框--%>
12 <s:textfield name="username" label="用户名"></s:textfield>
13 <%--用户密码输入框--%>
14 <s:password name="userpwd" label="密码"></s:password>
15 <%--登录按钮--%>
16 <s:submit value="登录"></s:submit>
17 <%--重置按钮--%>
18 <s:reset value="重置"></s:reset>
19 </s:form>

</center>
</body>
</html>

浏览器效果:

二,继承ActionSupport完成输入校验

ActionSupport类已经实现了Action接口和Validatable等接口,可以通过继承ActionSupport类简化Action开发。

Validatable接口中仅仅定义了一个validata()方法,通过重写该方法,可以非常方便地实现交验功能。如在该方法中

添加对用户输入的参数信息进行判断,如果用户名为空,密码为空等。如果要输出错误提示信息,则只需要调用ActionSupport类中

的addFieldErrors方法来添加相应的错误提示信息。

 package com.mhb.action;

 import com.mhb.model.LoginCheck;
import com.opensymphony.xwork2.ActionSupport; //控制类Action public class LoginAction2 extends ActionSupport { private String username;
private String userpwd; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
} public String execute(){
//new 一个LoginCheck对象
LoginCheck lc = new LoginCheck();
//调用业务逻辑组件的判断功能来判断
if(lc.UserLoginCheck(username, userpwd)){
return "success";
}else{
return "failure";
}
} 37 //执行输入校验
38 public void validate(){
39 //如果 用户名为空,或为null那么提示错误信息。
40 if(this.getUsername() == null || this.getUsername().equals("")){
41 this.addFieldError("username", "用户名不能为空!");
42 }
43
44 if(this.getUserpwd() == null || this.getUserpwd().equals("")){
45 this.addFieldError("userpwd", "用户密码不能为空");
46 }
47 }
}

如果交验失败,需要将页面跳转到input所对应的视图资源页面中,所以必须在struts.xml中配置input逻辑视图

对应的视图资源为login2.jsp,表示校验失败后将跳转回登录页面,其中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="mypack" extends="struts-default">
<action name="first">
<result>first.jsp</result>
</action>
</package> <!-- Action必须放在指定的包空间中 -->
<package name="struts2" extends="struts-default">
<!-- 定义login的action,其实现类为com.mhb.action.LoginAction -->
<action name="userlogin" class="com.mhb.action.LoginAction2">
<!-- 定义处理结果与视图资源之间的关系 -->
<result name="success">/login_success.jsp</result>
<result name="failure">/login_failure.jsp</result>
<result name="input">/login2.jsp</result>
</action>
</package>
</struts>

浏览器效果:不输入用户名和密码直接提交

基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验的更多相关文章

  1. 基于Struts2框架实现登录案例 之 程序国际化

    国际化牵涉的知识非常多,这里只能简单的介绍,程序国际化的一般做法是:在jsp页面时, 不是直接输出信息,而是输出一个key值,该key值在不同语言环境下找到对应资源文件下的 对应信息,因此首先要创建满 ...

  2. 基于Struts2框架实现登录案例

    一,准备工作  1)新建web项目,并导入Struts2jar文件和配置web.xml文件. struts2 jar文件 web.xml文件 <?xml version="1.0&qu ...

  3. JavaWeb_(Struts2框架)Ognl小案例查询帖子

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  4. 基于xml的用户注册登录案例

    用户注册登录 要求:3层框架,使用验证码 1        功能分析 l  注册 l  登录 1.1 JSP页面 l  regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时, ...

  5. struts2框架的登录制作

    首先:我们要建一个web项目 接着: 我们先来导入struts的xml文件 第一步:右击你的项目名,鼠标到MyEclipse会看到一个add struts开头的文件,点开以后看到: 这里我们选择str ...

  6. Django框架之登录案例

    内容: (1)request.GET和request.POST (2)获取get方法提交和post方法提交的数据 一.登录案例 登录逻辑代码 def login(request): if reques ...

  7. Struts2之Action三种接收参数形式与简单的表单验证

    有了前几篇的基础,相信大家对于Struts2已经有了一个很不错的认识,本篇我将为大家介绍一些关于Action接收参数的三种形式,以及简单的表单验证实现,下面进入正题,首先我们一起先来了解一下最基本的A ...

  8. struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)

    课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...

  9. 20190325-HTML框架、audio标签、vedio标签、source标签、HTML表单

    目录 1.HTML框架 frameset:框架标记 frame:框架内文件 iframe:内嵌框架 2.audio标签 src:URL(可以用source标签替代) autoplay:自动播放 pre ...

随机推荐

  1. 自改xss小平台上线

    原先一直用xss.hk结果不知怎么被关的,正好手上有代码于是自己搭了一个,网上的类似的xss平台大多一样,原先的xss的chrome插件,不适合 "manifest_version" ...

  2. 将Unity3D游戏移植到Android平台上

    将Unity3D游戏移植到Android平台是一件很容易的事情,只需要在File->Build Settings中选择Android平台,然后点击Switch Platform并Build出ap ...

  3. PDF打印

    问题: Microsoft Excel 不能访问文件“D:\bwms\源代码\Dcjet.BWMS\Dcjet.Bwms.Web\PrintTmp\Check_bwms.xls”. 可能的原因有以下几 ...

  4. centos Supervisor

    Supervisor是一个进程监控程序. 满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...

  5. 从零开始学ios开发(十):Multiview Applications(多个xib之前的切换)

    这篇学习的主要内容是Multiview,在我们学习iphone旋转的时候,介绍过多个view的使用方法,不过这里的view和旋转屏幕中所指的多个view是不同的,旋转屏幕中涉及到的多个view是在一个 ...

  6. ASP.NET MVC +EasyUI 权限设计(三)基础模块

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中呢,我们基本上搭建好了环境,那么本章我们就从基础模块开始写起.由于用户,角色,动作三个当中,都是依赖与动作的,所以本 ...

  7. OC self super isa指针

    self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可 ...

  8. 【BZOJ】【3398】【USACO 2009 Feb】Bullcow 牡牛和牝牛

    组合计数/乘法逆元 排列组合求总方案数 这个可以用一个一维的动态规划解决: f[i][0]表示第i头牛是牝牛的方案数 f[i][1]表示第i头牛是牡牛的方案数 则转移为:f[i][0]=f[i-1][ ...

  9. 剑指offer--面试题15--相关

    感受:清晰的思路是最重要的!!! 题目:求链表中间节点 ListNode* MidNodeInList(ListNode* pHead) { if(pHead == NULL) return NULL ...

  10. 【转载】struct和typedef struct彻底明白了

    分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...