SSH项目--国税(二)

校验用户帐号唯一性:
需要校验的地方:新增与编辑;其中编辑页面时,帐号是已经存在的需要将当前帐号排除在校验范围内
校验时机:当帐号的值发生变化时;保存的时候
校验帐号唯一:
前端:ajax
后端:
1、获取帐号
2、校验
2.1、根据帐号查询用户们
 select * from user where account='帐号' and id!= '用户id'
1.表单校验
在用户的新增、编辑中对帐号、密码进行非空校验和帐号的唯一性校验。需要注意的是在编辑页面中帐号的唯一性校验要排除当前编辑的帐号,不然将出现无法保存的情况。
1、在jsp页面中,分别进行两个时机的校验,①是在编辑帐号的表单域时需要到服务器中校验是否已经存在输入的帐号;②在提交表单时再次进行校验,避免在填写表单时帐号已被使用的情况;
addUI.jsp中的方法:
var vResult = false;
    //校验帐号唯一
    functiondoVerify(){
    //1、获取帐号
    var account =$("#account").val();
    if(account != ""){
   //2、校验 
    $.ajax({
   url:"${basePath}nsfw/user_verifyAccount.action",
    data: {"user.account":account},
    type: "post",
    async: false,//非异步
    success:function(msg){
    if("true" != msg){
    //帐号已经存在
   alert("帐号已经存在。请使用其它帐号!");
    //定焦
   $("#account").focus();
    vResult = false;
    } else {
    vResult = true;
    }
    }
    });
    }
    }


editUI.jsp:
 
var vResult = false;
    //校验帐号唯一
    functiondoVerify(){
    //1、获取帐号
    var account =$("#account").val();
    if(account != ""){
   //2、校验 
    $.ajax({
   url:"${basePath}nsfw/user_verifyAccount.action",
    data: {"user.account":account, "user.id": "${user.id}"},
    type: "post",
    async: false,//非异步
    success:function(msg){
    if("true" != msg){
    //帐号已经存在
   alert("帐号已经存在。请使用其它帐号!");
    //定焦
   $("#account").focus();
    vResult = false;
    } else {
    vResult = true;
    }
    }
    });
    }
    }


提交表单:
   
 function doSubmit(){
    var name =$("#name");
    if(name.val() ==""){
    alert("用户名不能为空!");
    name.focus();
    return false;
    }
    var password =$("#password");
    if(password.val() ==""){
    alert("密码不能为空!");
    password.focus();
    return false;
    }
    //帐号校验
    doVerify();
    if(vResult){
    //提交表单
   document.forms[0].submit();
    }
    }


2、在action中,根据传入的帐号和用户id到用户表中查找用户,如果出现有任何记录说明该帐号已经被使用。
//校验用户帐号唯一
public void verifyAccount(){
try {
//1、获取帐号
if(user != null &&StringUtils.isNotBlank(user.getAccount())){
//2、根据帐号到数据库中校验是否存在该帐号对应的用户
List list = userService.findUserByAccountAndId(user.getId(),user.getAccount());
String strResult = "true";
if(list != null && list.size() > 0){
//说明该帐号已经存在
strResult = "false";
}
//输出
HttpServletResponse response =ServletActionContext.getResponse();
response.setContentType("text/html");
ServletOutputStream outputStream =response.getOutputStream();
outputStream.write(strResult.getBytes());
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}


3、在service、dao中的代码分别如下:
UserServiceImpl 中实现的方法:
public List findUserByAccountAndId(String id, String account){
return userDao.findUserByAccountAndId(id, account);
}
UserDaoImpl中需要对传入的id进行判断实现的方法:
public List findUserByAccountAndId(String id, String account){
String hql = "FROM User WHERE account = ?";
if(StringUtils.isNotBlank(id)){
hql += " AND id!=?";
}
Query query = getSession().createQuery(hql);
query.setParameter(0, account);
if(StringUtils.isNotBlank(id)){
query.setParameter(1, id);
}
return query.list();
}


系统可能出现的异常:(异常分类)
dao: 比较致命的操作异常,是会有很大可能影响整次的请求
service: 业务层的异常信息需要自定义
action: 控制层的异常信息需要自定义

4抽取BaseAction
在action中继承了ActionSupport和其它一些公共属性,如selectedRow等;可能以后还会产生更多公共的内容,所以应该把这些共有的抽取出来,放入到一个基本action中,我们命名为BaseAction,让它去继承ActionSupport和其它公共属性,其它的action只要继承它就可以了。
5系统异常处理
当在页面中发送了请求,请求被系统处理时出现错误时,如果没有特别处理在请求过程中出现的异常信息时,那么返回给用户的则是后台的异常信息页面;为避免直接将这报错的页面呈现给用户,可对这报错进行处理。

5.1分层异常
在本系统中的后台处理有分3个层,分别是action、service和dao层,每个层次都有可能出现相应错误。①Action层可能出现解析请求参数、返回结果有问题;② Service层则可能出现请求中要做的业务操作出现问题;出现了问题要根据实际情况判断是否会影响本次操作结果,action中要根据异常信息进行判断然后确定是否操作成功;③dao层也可能出现在操作数据库时出现错误;而此种错误一般都是致命的会影响操作结果。以此;在3个层次中至少要有两种类型的异常信息来标识。
制定总的系统异常类:
public abstract class SysException extends Exception {
private String errorMsg;
public SysException() {
super();
}
public SysException(String message, Throwable cause) {
super(message, cause);
errorMsg = message;
}
public SysException(String message) {
super(message);
errorMsg = message;
}
public SysException(Throwable cause) {
super(cause);
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}


Action层异常类:
public class ActionException extends SysException {
public ActionException() {
super("请求发生错误!");
}
public ActionException(String message) {
super(message);
}
}
Service层异常类:
public class ServiceException extends SysException {
public ServiceException() {
super("业务操作错误!");
}
public ServiceException(String message) {
super(message);
}
}


5.2异常处理
5.2.1全局异常映射
在struts总配置文件(struts.xml)中配置一个包括全局异常映射和全局结果的package,然后让其它所有的业务模块的struts配置文件(*-struts.xml)继承后便可处理由后台抛出的特定异常并处理。
在总配置文件struts.xml中:
<!-- 配置全局结果及异常映射 -->
<package name="base-default" extends="struts-default">
<!-- 全局返回结果 -->
<global-results>
<result name="sysError">/WEB-INF/jsp/error.jsp</result>
<result name="input">/WEB-INF/jsp/error.jsp</result>
</global-results>
<!-- 全局异常映射 -->
<global-exception-mappings>
<exception-mapping result="sysError"exception="cn.itcast.core.exception.SysException"></exception-mapping>
<exception-mapping result="input"exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>


在子业务模块中的*-sturts.xml中继承总配置文件中的package:
<package name="user-action" namespace="/nsfw"extends="base-default">
<action name="user_*"class="cn.itcast.nsfw.user.action.UserAction" method="{1}">
<resultname="{1}">/WEB-INF/jsp/nsfw/user/{1}.jsp</result>
<result name="list" type="redirectAction">
<param name="actionName">user_listUI</param>
</result>
</action>
</package>


在具体的后台处理代码中抛出系统异常:

如果在action中只抛出了ActionException,那么非此异常出现时,如果在全局异常映射中配置了java.lang.Exception异常类的映射,同样可以捕获。


5.2.2 制定返回类型(StrutsResultSupport)
在有特殊情况时;如果没有异常信息,但是有错误并且有错误信息等内容;此时也需要进行友好的错误处理的话,那么可以借助StrutsResultSupport返回结果类型来实现特定处理。此种方式先需要继承StrutsResultSupport,然后可以在子类中获取本次请求的相关信息,再根据相关信息进行结果处理:
public class SysResultAction extends StrutsResultSupport{
@Override
protected void doExecute(String arg0, ActionInvocationinvocation) throws Exception {
HttpServletRequest request =ServletActionContext.getRequest();
HttpServletResponse response =ServletActionContext.getResponse();
BaseAction action = (BaseAction)invocation.getAction();
//do something
System.out.println("进入了 SysResultAction ...");
}
}


在struts.xml总配置文件中定义全局处理类型和全局处理结果:
<!-- 配置全局结果及异常映射 -->
<package name="base-default" extends="struts-default">
<!-- 返回结果类型 -->
<result-types>
<result-type name="error"class="cn.itcast.core.action.SysResultAction"></result-type>
</result-types>
<!-- 全局返回结果 -->
<global-results>
<result name="error"type="error">/WEB-INF/jsp/error.jsp</result>
<result name="sysError">/WEB-INF/jsp/error.jsp</result>
<result name="input">/WEB-INF/jsp/error.jsp</result>
</global-results>
<!-- 全局异常映射 -->
<global-exception-mappings>
<exception-mapping result="sysError"exception="cn.itcast.core.exception.SysException"></exception-mapping>
<exception-mapping result="input"exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值