今天用全注解的SSH 写了一个简单的 关于AJAX的注册页面。自己捣鼓了几个小时才弄出来,现在将他记录下来。
主要的问题就是 后端的返回值前端无法接收。直接抛出异常。
主要原因是后端传值的方式出错。现在我给出一个例子
前端的代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function(){
$("#form1").submit(function(){
userName=$("#userName").val();
userPassword=$("#userPassword").val();
alert(userName);
alert(userPassword);
$.ajax({
url:"${pageContext.request.contextPath }/Register",
dataType:"json",
type:"post",
data:$("#form1").serialize(),
success:function(data){
alert(data.str);
},
error:function(){
alert("ajax有问题!");
}
});
});
});
</script>
</head>
<body>
<h1>Hello World From SSH</h1>
<form id="form1" onsubmit="return false" action="##" method="post">
用户名:<s:textfield name="userName" id="userName"/><br/>
密 码:<s:password name="userPassword" id="userPassword"/><br/>
<input type="submit" id="submit" value="注册"/>
</form>
</body>
</html>
这里主要的问题就是那个datatype
datatype 这里是指后端返回的格式 由于我们需要返回的json的格式,所以需要在这里填上 json
下面是action的代码:
@ParentPackage("json-default")
@Result(type="json")
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Autowired
private UserService userService ;
//private User user;
private String userName;
private String userPassword;
private String str;
/*public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}*/
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Action(value = "Register", results = { @Result(name ="SUCCESS", type="json")})
public String Register() {
User user = new User();
System.out.println(userName);
user.setUserName(userName);
user.setUserPassword(userPassword);
//HttpServletResponse response = ServletActionContext.getResponse();
//PrintWriter out = response.getWriter();
userService.userRegister(user);
str="你好";
//out.print("插入成功!");
//out.print("插入失败!");
return SUCCESS;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
主要是这3个注解
一个是@ParentPackage("json-default")
一个是@Result(type="json")
一个是@Action(value = "Register", results = { @Result(name ="SUCCESS", type="json")})
第一个注解是使用json 在struts2中一定要声明 ,相当于
<package name="default" extends="json-default">
//*****
</package>
第二个注解,如果没把它放在类前面,即使有第三个注解,那么ajax返回的格式还是
与js里面的datatype 格式不同。会触发error函数。
加上之后返回的类型就变成了
这样就能返回json格式了。
主要问题就是这些。