【问题标题】:How to post a list of complicated object to struts2如何将复杂对象列表发布到struts2
【发布时间】:2011-04-18 10:37:33
【问题描述】:

我想发送一个用户对象列表,而用户在这里有字段名称和地址。

像这样的一些代码:网页是由jquery动态操作的。有网页示例代码。

<form id="create">
  <tr id="1"> <td> <input type='text' name='name'/></td><td><input type='text' name='address'/></td></tr>
  <tr id="3"> <td> <input type='text' name='name'/></td><td><input type='text' name='address'/></td></tr>
</form>
<input type='submit' onclick="submit()"/>


<script>
  function submit() {
    var results = [];
    $("#create tr").each(function(index, tr) {
      var user = {
        name: tr.find('input[name="name"]').val(),
        address: tr.find('input[name="address"]').val()
      }
      results.push(user);
    });

    var param = {users:results};
    $.ajax({
      url: "save.action",
      data: param,
      type: 'post',
      success: function() {
        alert('success');  
      },
      error: function() {
        alert('error');  
      }
    });
  }
</script>

动作代码如下:

@ParentPackage('json-default')
public class UserAction extends ActionSupport {
  private List<User> users;
  public List<User> getUsers(){
     return users;
  }
  public void setUsers(List<User> users){
     this.users = users;
  }

@Action(name="save", results={@Result{name="success",location="/webpage/addUser.jsp"}})
public String execute(){
 for(User user: Users){
    System.out.println(user.getName()+" address: "+ user.getAddress());
 }
 return SUCCESS; 
}
}

我的问题是为什么操作无法接收数据? 我从萤火虫捕获数据并且数据已经发布。 所以有任何提示或错误吗? 这两天我在这里很困惑,请帮助。

【问题讨论】:

    标签: jquery ajax list object struts2


    【解决方案1】:

    如果您使用 jQuery 1.4,您应该考虑到参数序列化的变化。 JQuery 在 $.ajax 中提供了一个新标志来覆盖默认行为(并返回使用旧的参数序列化方式):$.ajax 中的“传统”选项所以你应该尝试在 JQuery 上通过 Ajax 发送数据:

    ....
    $.ajax({
        url:"save.action",
        data:param,
        type:'post',
        traditional: true,
    ....
    

    【讨论】:

    • @lykm 你可以试试 $.ajaxSettings.traditional = true;或 jQuery.ajaxSettings.traditional = true; (取决于您的 JQuery 版本)在 $.ajax({...); 行之前(我的意思是在您的代码中的 var param = {users:results}; 行之后),它应该在您通过 Ajax 发送数据之前编写。
    • 谢谢,其实我对jquery并不熟悉。版本是 1.4.4。我会试试的。
    • 不知道jquery能不能序列化案例。我的意思是当序列化对象列表时。找不到这样的例子。
    • 非常感谢。我发现了真正的问题。当设置tradition=true 时,struts 会收到一个javascript 对象,它不能转换成User。而当tradition=false时,jquery将user:{name:'jo​​hn'}序列化为user[name]='john',struts无法识别。解决方法是修改jquery的param方法。
    【解决方案2】:

    如果 Firebug 提示数据正在成功发布,那么我建议您在 Java 端进行一些调试以确认。

    尝试放置一个断点并查看传入的实际HttpServletRequest 参数,以确保它们设置正确。如果是,请确保正在调用您的 setUsers(List&lt;User&gt; user) 方法。这应该准确指出发生故障的位置。

    【讨论】:

    • 谢谢,我在请求中找到了。用户是三个对象,[对象对象]。那么,哪里错了?这是否意味着序列化失败?
    【解决方案3】:

    您能否发布您的 jsp 的其余部分、操作以及您要发布回您的操作的确切内容。没有看到其余部分,我猜您没有正确处理原位列表更新。如果您使用的是“传统”HTML,我希望在 HTML 和返回的数据中都看到对用户列表索引的引用,以便 Struts 知道要更新/创建哪些列表元素。

    问候

    【讨论】:

    • 从页面中可以看到,我的程序中几乎有完整的信息。 ajax 序列化有一些错误。但我还是一头雾水。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2017-06-19
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多