前台提交的代码,在后台通过属性注入不进去的问题
前台表单代码:
<form id="editForm" method="post">
<table>
<tr>
<td><input class="easyui-textbox" hidden="true" type="text" name="dep.uuid" data-options="required:true"></input></td>
</tr>
<tr>
<td>部门名称:</td>
<td><input class="easyui-textbox" type="text" name="dep.name" data-options="required:true"></input></td>
</tr>
<tr>
<td>部门联系电话:</td>
<td><input class="easyui-textbox" type="text" name="dep.tele" data-options="required:true"></input></td>
</tr>
<tr>
<td>
<button id="editBtn" type="button" class="easyui-linkbutton">编辑</button>
<button id="clearBtn" type="button" class="easyui-linkbutton" onclick="clearForm('editForm')">重置</button>
</td>
</tr>
</table>
</form>
<struts>
<package name="erp" extends="struts-default" namespace="/">
<action name="depAction_*" class="depAction" method="{1}"></action>
</package>
</struts>
depAction里面定义的dep的属性驱动以及add方法
//属性驱动
private Dep dep;
public void setDep(Dep dep) {
this.dep = dep;
}
/**
* 添加部门
*/
public void add() {
System.out.println(dep.getName() +"---"+dep.getTele());
try {
depBiz.add(dep);
returnOptionMessage(true, "添加成功!");
} catch (Exception e) {
returnOptionMessage(false, "添加失败");
e.printStackTrace();
}
}
//部门的实体类
public class Dep {
private Long uuid; //部门ID
private String name; //部门名称
private String tele; //部门电话
public Long getUuid() {
return uuid;
}
public void setUuid(Long uuid) {
this.uuid = uuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTele() {
return tele;
}
public void setTele(String tele) {
this.tele = tele;
}
方法1:先设置同步在进行Ajax操作
//在全局或某个需要的函数内设置Ajax异步为false,也就是同步
$.ajaxSetup({
async : false
});
//然后再进行你的Ajax操作
$.post(地址, 参数, function(data, status) {
if (status == "success") {
//赋值给全局变量
}
else {
alert("wrong");
}
});
方法2:直接用$.ajax
$.ajax({
type : "post",
url :地址,
data : "参数" + 参数的值,
async : false,
success : function(data){
//赋值给全局变量;
}
});
问题终于解决了,总结一下:struts2提供了两种数据封装机制
一、属性驱动
属性驱动里面又细分成两种:
1、提供属性setter方法的方式
前台页面:
只需在前台表单的input标签的name提供相应的属性名
<input type = "text" name =“username"></input>
后台:
只需提供私有的成员变量以及对应的setter方法
class UserAction{
private String username;
public void setUsername(String username){
this.username = username;
}
}
2、页面提供表达式的方式
前台页面:
需要提供ognl表达式(obj.property)
//前段必须提供ognl表达式
<input type="text" name="user.username"></input>
后台:
class UserAction{
//只需定义实体变量
private User user;
public void setUser(String user){
this.user = user;
}
//必须提供对应的getter方法(如果没有提供,struts每次创建一个实体,每个实体里面只有一个属性有值,其他都为默认值,最终将其中一个实体返回)
public String getUser(){
return user;
}
}
//对应的实体类
class User{
private String username;
public void setUsername(String username){
this.username = username
}
public String getUsername(){
return username;
}
}
二、模型驱动
前台:
//只需提供实体的属性
<input type = "text" name = "username"></input>
后台:
//实现ModelDriven接口
class UserAction implements ModelDriven<User> {
//必须手动创建对象
private User user = new User();
//实现getModel方法并将创建的实体返回
public User getModel(){
return user;
}
}
这样传值,别忘了引jsonp的jar包
$.ajax({
url:url+"fenlei/selectf",
type:"post",
data:{},
cache:false,
dataType:"jsonp", //指定实现ajax的方式,有两种json和jsonp,默认是json,json是struts ajax的实现方式
//指定通过ajax从类中带过来的数据在页面中通过哪一个函数执行
success:function(d){
$.each(d.list,function(i,item){
$("#fid").append('
});