一,使用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. CDH集群主节点宕机恢复

    1       情况概述 公司的开发集群在周末莫名其妙的主节点Hadoop-1的启动固态盘挂了,由于CM.HDFS的NameNode.HBase的Master都安装在Hadoop-1,导致了整个集群都 ...

  2. Go学习

    简介 Go语言是Google出了一个语言,基本概念我就不介绍了, GO语言从原生上支持高并发,并提供了简单的调用方式,我们就重点研究一下它的高并发 进程与线程 在介绍高并发之前,我们需要了解一下我们现 ...

  3. 【转】Checkpoint--与lazy writer区别

      checkpoint目的是减少数据库的恢复时间(服务奔溃或重启服务后的恢复),而lazy writer的目的是保证SQL OS 有空闲缓存块和系统有一定可用内存. Checkpoint和lazyW ...

  4. assets

    我们知道assets/和res/文件夹用于存放可在应用程序中的使用文件. assets/用于存储各种应用程序中需要的文件(例如配置文件或音频文件等),这些文件会打包在Android应用程序中. res ...

  5. odoo 清除所有运行数据

    测试odoo,如果需要一个干净的db.经常需要清除掉所有业务数据.做如下操作,较为方便 1:建立一个服务器动作,动作的python代码入下. 然后新建一个菜单,菜单动作关联到 这个动作.需要清空db, ...

  6. Delphi 串口打印机打印

    一.硬件准备 打印机: 打印机必须具有串口,没有标配串口的打印机,必须购买串口卡,串口卡的型号请参考随机<操作手册>. 计算机: 计算机必须具有串口,计算机通常具有两个串口:COM1和CO ...

  7. [React Testing] Intro to Shallow Rendering

    In this lesson, we walk through how to use one of React's Test Utilities (from thereact-addons-test- ...

  8. 了解 : prevent default

    基本了解是阻止事件之前设置好的事件触发,像是angular router ui里的 preventDefault是这样的. 在$stateChange的是后,可以调用preventDefault 来阻 ...

  9. LeetCode 9. Palindrome Number(c语言版)

    题目: Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  10. C# System.IO.File

    using System; using System.IO; class Test { public static void Main() { string path = @"c:\temp ...