如何将对象列表传递给Spring Controller以进行多行插入?

时间:2012-09-14 18:42:08

标签: javascript html5 spring jdbctemplate

有一个输出HTML5页面的jsp。 HTML5有两个按钮 - “添加”和“保存”。 HTML5本地存储功能用于存储离线数据。

“添加”按钮在单击时添加记录。因此,如果用户填写jsp页面上的字段5次并单击“添加”按钮5次,则会向HTML5表添加5条记录。单击“添加”按钮时,将运行javascript,将记录添加到结果集。因此,对于5次点击,javascript结果集包含5条记录。

“保存”按钮,单击时,必须将javascript结果集中的所有5条记录都插入到Oracle数据库中。为此,必须将结果集中的记录列表传递给Spring控制器。

Spring控制器已使用batchUpdate api进行编码。

public void insertListOfPojos(final List<MyPojo> myPojoList) {

    String sql = "INSERT INTO "
        + "MY_TABLE "
        + "(FIELD_1,FIELD_2,FIELD_3) "
        + "VALUES " + "(?,?,?)";

    getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {

        @Override
        public void setValues(PreparedStatement ps, int i)
            throws SQLException {

            MyPojo myPojo = myPojoList.get(i);
            ps.setString(1, myPojo.getField1());
            ps.setString(2, myPojo.getField2());
            ps.setString(3, myPojo.getField3());

        }

        @Override
        public int getBatchSize() {
            return myPojoList.size();
        }
    });

}

问题是 - 如何将javascript结果集中的记录传递给Spring控制器,以便在单击“添加”按钮时控制器的“myPojoList”可以使用它?

1 个答案:

答案 0 :(得分:1)

我有几个想法

  1. 将5个记录形成一个json字符串并发布到控制器,并将json解组为对象并存储在Oracle中。

  2. 将5个记录形成分隔字符串,例如id1,name1,address1|id2,name2,address2等。在服务器端,您可以标记化并存储在Oracle中。

  3. JSON具有标准格式,因此这将是更好的选择。用于存储在HTML5中的javascript可用于在客户端中形成此字符串,并且一旦从客户端提交读取并推送到控制器。