<!-- 这是一个注用来册用户的表单,
在提交表单之前,表单的每个input标签都要经过验证,然后在能提交。
验证的方式是用 jquery.validate 方式进行验证的。
然后在用户名是否在之前被注册过,还有密码和确认密码是否相同 都是通过jquery 的$.ajax方法验证的
具体实现是,把用户名、密码、确认密码拼接成一个字符串,然后传到后代,在后台经过处理后,返回一个msg.
把msg传到前台,在通过msg显示到 前台的jsp页面上去。
-->
<form name="register" id="register_user" method="post" action="RegisterUser.action">
<fieldset>
<legend>一个简单的有验证功能的注册用户的表单</legend>
<p>
<label for="user_name">账户名</label><em>*</em>
<input type="text" name="username" id="user_name" onblur="javascript:registerUsername();">
<span id="usernameMsg"></span>
</p>
<p>
<label for="pwd">密码</label><em>*</em>
<input type="password" name="password" id="pwd">
</p>
<p>
<label for="confirm_pwd">确认密码</label><em>*</em>
<input type="password" name="cpassword" id="confirm_pwd" onblur="javascript:registerPwd();">
<span id="pwdMsg"></span>
</p>
<p>
<label for="email">电子邮件</label><em>*</em>
<input type="text" name="email" id="email"/>
</p>
<p>
<input class="submit" type="submit" value="提交"/>
</p>
</fieldset>
</form><br/>
------------------------------------------------------------------------------------------
<script type="text/javascript">
function registerPwd() {
alert("registerPwd()被执行了吗");
var valData = 'password=' + $('#pwd').val();
valData += '&cpassword=' + $('#confirm_pwd').val();
alert(valData);
$.ajax({
type:'post',
url: "Register!confirmPwd.action",
data:valData,
cache: false,
success: function(data){
if(data!=null){
$("#pwdMsg").html(data);
}
}
});
}
function registerUsername() {
alert("registerUsername()被执行了吗");
var valData = 'username=' + $('#user_name').val();
alert(valData);
$.ajax({
type:'post',
url: "Register!registerUsername.action",
data:valData,
cache: false,
success: function(data){
if(data!=null){
$("#usernameMsg").html(data);
}
}
});
}
</script>
-----------------------------------------------------------------------------------------
用来验证用户名 密码和确认密码的后台
public class RegisterAction extends ActionSupportExtend {
public String confirmPwd() throws Exception {
if(!cpassword.equals(password))
{
msg = "<font color=red>两次输入的密码不相同</font>";
}
return "ajax";
}
public String registerUsername() throws Exception {
//验证账户名是否已经被注册过
if(username!=null&&!"".equals(username)){
int mark = registerService.queryUsername(username);
if(mark==0){
msg = "<font color=red>用户名可以注册</font>";
}
else{
msg = "<font color=red>用户名已经被注册过</font>";
}
}
return "ajax";
}
}
-------------------------------------------------------------------
提交表单的后台
public class RegisterUserAction extends ActionSupportExtend implements ModelDriven<Users> {
@Autowired
private RegisterService registerService;
private Users user = new Users();
@Override
public String execute() throws Exception {
registerService.addUser(user);
return SUCCESS;
}
public Users getModel() {
return user;
}
}
注意 在这个Action中是通过Struts2的模型驱动的方式,直接把表单中每个input标签的name属性封装到对应的java实体类中,我在Action中定义了一个Users user,这个user 就是我表单中的数据生成的。
说白了,我表单中的<input type="text" name="username" id="user_name" >,name属性值是username,就是和Users类中的 username 属性对应的.
我在Action中定义一个user,Struts2会帮我把表单中的数据封转到这个user里边。然后就可以直接使用这个user啦,我是吧user,作为参数传递的。
--------------------------
如果不使用模型驱动,very sorry,你在 Action 中定义的Users user 没有值,你只有通过在Action中定义username,password,和cpassword,来接收值了,注意 这要和表单中的name属性值想对应才能接收。
然后再自己封装。
--------------------------------------------------------------------
还可以通过在表单中<input type="text" name="Users.username" id="user_name" >
这样也可以直接接到值了 自动封转的 name 前边有个实体名.
-------------------------------------------------------------------
大家明白了吗 halohoho O^_^o