/** * 批量插入 */ public void insertBudget(List<CostBudget> budgetList) { final List<CostBudget> budgetListTemp = budgetList; if(budgetListTemp != null && budgetListTemp.size() > 0) { String sql= CommonConfig.getString("costbudget.insert.cost_budget",""); this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { CostBudget costBudget = budgetListTemp.get(i); ps.setInt(1, costBudget.getTerm()); ps.setInt(2, costBudget.getBudgetType()); ps.setInt(3, costBudget.getDeptId() != null?costBudget.getDeptId():0); ps.setString(4, costBudget.getImportDeptName()); ps.setString(5, costBudget.getKmBh()); ps.setString(6, costBudget.getImportKmMc()); ps.setBigDecimal(7, BigDecimal.valueOf(costBudget.getCurrentMonth())); ps.setBigDecimal(8, BigDecimal.valueOf(costBudget.getCurrentMonthAdjust())); ps.setBigDecimal(9, BigDecimal.valueOf(costBudget.getCurrentMonthAdAfter())); ps.setBigDecimal(10, BigDecimal.valueOf(costBudget.getSumCurrent())); ps.setBigDecimal(11, BigDecimal.valueOf(costBudget.getSumCurrentAdjust())); ps.setBigDecimal(12, BigDecimal.valueOf(costBudget.getSumCurrentAdAfter())); ps.setBigDecimal(13, BigDecimal.valueOf(costBudget.getYearBudget())); ps.setBigDecimal(14, BigDecimal.valueOf(costBudget.getBudgetCompletionRate())); //每2000条进行事物提交 if (i%2000 == 0) { ps.executeBatch(); //执行prepareStatement对象中所有的sql语句 } } @Override public int getBatchSize() { return budgetListTemp.size(); } }); } }
在调用
$('#downloadAttrForm').formSerialize();
时,参数传至后台经常会出现乱码,无论是中文还是时间格式等,解决方法如下所示:
1、因为jquery在调用formSerialize()方法时,内部会自动encodeURIComponent方法,因此在Jsp页面中调用formSerialize()方法后,还需调用decodeURIComponent方法,示例如下所示:
var formData = $("#queryDeptBudgetForm").formSerialize();
formData = decodeURIComponent(formData, true);
var _url="${path}/cost/queryDeptBudget.do?"+formData;
2、在后台处理传过来的参数时,添加以下代码:
java.net.URLDecoder.decode(params , "UTF-8");
或:
增加公用转码方法,使用该方法:
public static String deCodeURLName(String name) { String result = null; try { result = name != null ? new String(name.getBytes("ISO-8859-1"),"UTF-8") : null; } catch (Exception e) { e.printStackTrace(); } return result; }
原文链接:http://chennaigong.iteye.com/blog/1545057
最近几天学了下sencha touch2的一些基本控件和一些写法。都是很基础的(呵呵 高级的我学不会。。)
sencha touch2的语法感觉很像面向对象的语法。有自己的类,类可以继承。(现在语言貌似都向oop靠拢。。)。
sencha touch2如果项目大的话有一种mvc的架构写法。这以后贴代码给大家看吧。
这篇文章讲的是sencha touch2的类。
废话不多说了。开始吧。
首先你先配置下sencha touch2的环境,导入sdk什么的,请参照http://chennaigong.iteye.com/admin/blogs/1542268。
配置好了环境之后,就可以在app.js里写代码喽。
首先申明一个类:
Ext.define( "Animal", { config: { name:null }, constructor:function(config) { this.initConfig(config); }, speak:function() { Ext.Msg.alert("123"); } } )
看得懂吧。申明了"Animal"这个类,然后申明name这个变量,constructor就是这个类初始化时要调用的。speak是一个方法。把这句翻译成Java代码可以如下:
public class Animal { String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void speak() { System.out.print("123"); } }
呵呵 当你在sencha touch2里申明name变量时,他会自动生成getter和setter存取方法的。当然这里的name不一定是String类型的。
然后可以调用这个类了 。完整的写法如下:
Ext.application( { name:"sencha", launch:function() { var my=Ext.create("Animal",{name:"bob"}) my.speak(); } } ) Ext.define( "Animal", { config: { name:null }, constructor:function(config) { this.initConfig(config); }, speak:function() { Ext.Msg.alert("123"); } } )
然后类的继承写法如下:
Ext.define( "Person", { extend:"Animal", speak:function() { Ext.Msg.alert(this.getName()); } } )
应该看得懂吧,Person类继承了Animal类,然后覆盖了speak这个方法。
完整的的如下:
Ext.application( { name:"sencha", launch:function() { var my=Ext.create("Person",{name:"bob"}) my.setName("haha"); my.speak(); } } ) Ext.define( "Animal", { config: { name:null }, constructor:function(config) { this.initConfig(config); }, speak:function() { Ext.Msg.alert("123"); } } ) Ext.define( "Person", { extend:"Animal", speak:function() { Ext.Msg.alert(this.getName()); } } )
他会弹出"haha"这个字符串。呵呵 写好了