在用户的新增(add)、编辑(edit)中对用户名(username)、密码(password)进行非空校验和帐号(account)的唯一性校验。
需要注意的是在编辑页面(editUI.jsp)中帐号(account)的唯一性校验要排除当前编辑的帐号,不然将出现无法保存的情况。
1、JSP页面
在jsp页面中,分别进行两个时机的校验,①是在编辑帐号(account)的表单域时需要到服务器中校验是否已经存在输入的帐号;②在提交(submit)表单时再次进行校验,避免在填写表单时帐号已被使用的情况;
表单部分
<form id="form" name="form" action="${basePath}/tax/user_add.action" method="post" enctype="multipart/form-data">
<s:textfield id="name" name="user.name"/>
<s:textfield id="account" name="user.account" onchange="doVerify()"/>
<s:textfield id="password" name="user.password"/>
<input type="button" class="btnB2" value="保存" onclick="doSubmit()"/>
<input type="button" onclick="javascript:history.go(-1)" class="btnB2" value="返回" />
</form>
addUI.jsp中Javascript部分
<script type="text/javascript">
var vResult = false;
//检验帐号唯一性
function doVerify(){
//1、获取帐号
var account = $('#account').val();
if(account != null){
//2、校验
$.ajax({
url:"${basePath}/tax/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;
}
}
});
}
}
//提交表单
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();
}
}
</script>
注意:上述javascript中的doVerify()方法中,$.ajax方法中的async参数为false,它的目的是实现帐号的同步验证,而不是异步验证。
editUI.jsp内的Javascript部分有一点不同,就是:在进行帐号(account)验证的时候,需要同时传递id过去。
var vResult = false;
//检验帐号唯一性
function doVerify(){
//1、获取帐号
var account = $('#account').val();
if(account != null){
//2、校验
$.ajax({
url:"${basePath}/tax/user_verifyAccount.action",
data:{"user.account":account,"user.id":"${user.id}"},//注意:这里是用EL表达式取ValueStack上的值
type:"post",
async:false,//非异步
success:function(msg){
if("true" != msg){
//帐号已经存在
alert("帐号已经存在。请使用其它账号");
//定焦
$('#account').focus();
vResult = false;
}
else{
vResult = true;
}
}
});
}
}
知识点(1)EL表达式获取ValueStack上的值
Struts2中EL表达式取值 http://blog.csdn.net/cuihaiyang/article/details/41950141 struts2 request内幕 为什么在struts2用EL表达式可以取值http://www.tuicool.com/articles/bQzaEzI Struts2中的ModelDriven机制及其运用 http://blog.csdn.net/li_tengfei/article/details/6098145 |
2、后台(服务器端)
2.1、action层
public void verifyAccount(){
try {
//1、获取账号
if(user != null && StringUtils.isNotBlank(user.getAccount())){
//2、根据帐号到数据库校验是否存在该帐号对应的用户
List<User> 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/plain");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(strResult.getBytes());
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
知识点(1)StringUtils
org.apache.commons.lang3.StringUtils 位于struts-2.3.29\commons-lang3-3.2.jar中 public static boolean isEmpty(CharSequence cs)
{
return cs == null || cs.length() == 0;
}
public static boolean isNotEmpty(CharSequence cs)
{
return !isEmpty(cs);
}
public static boolean isBlank(CharSequence cs)
{
int strLen;
if(cs == null || (strLen = cs.length()) == 0)
return true;
for(int i = 0; i < strLen; i++)
if(!Character.isWhitespace(cs.charAt(i)))
return false;
return true;
}
public static boolean isNotBlank(CharSequence cs)
{
return !isBlank(cs);
} |
2.2、service层
UserService.java
List<User> findUserByAccountAndId(String id, String account);
UserServiceImpl.java
public List<User> findUserByAccountAndId(String id, String account) {
return userDao.findUserByAccountAndId(id,account);
}
2.3、dao层
UserDao.java
List<User> findUserByAccountAndId(String id, String account);
UserDaoImpl.java
public List<User> 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();
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。