本着尽量轻量级、尽量少依赖的原则选择了这一组合。主要思路是前端jquery以getJSON取得数据,然后展示,减少页面刷新,减少jsp的使用,数据层根据需要选择ibatis或hibernate什么的。
ibatis的配置就不贴了,下面是spring的主要配置,用了annotation,需要配置的也少。
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/config/SqlMapConfig.xml" />
</bean>
<bean id="personDao" class="net.dao.PersonDao">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" >
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="1" />
</bean>
三个java类代码很简单,表达主要意思就行了
public class PersonDao extends SqlMapClientDaoSupport {
//也不想做三层,表示一下,自己取舍吧
}
@Service("personService")
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonDao personDao;
//调一个定义好的查询sql
public List findByLastName(String lastName) {
return personDao.getSqlMapClientTemplate().queryForList("getPerson");
}
}
@Controller
@RequestMapping("/person/**")
public class PersonController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/person/{id}", method = RequestMethod.GET)
public String show(@PathVariable("id") Long id, ModelMap modelMap) {
Assert.notNull(id, "Identifier must be provided.");
modelMap.addAttribute("person", personService.findByLastName(id.toString()));
return "person/show";
}
}
web.xml里配置DispatcherServlet 映射*.json请求,jquery请求返回json对象。imList可以生成表格、下拉列表等。jqgrid比jquery都大了,如果只是显示一下,就用这个只有几K的小插件吧。(IE8有点问题,要自己改一下)
<html>
<head>
<meta http-equiv = "content-type" content = "text/html; charset=UTF-8" />
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script id="source" language="javascript" type="text/javascript">
$(function() {
$.getJSON("person/12.json", null, function(json){
var result = json.person;
//展示数据
});
});
</script>
</head>
<body>
<div id="mytb"></div>
</body>
</html>
2010-1-26补充:
通过如下配置可以约定按首字母小写类名去掉Controller加方法名来实现url映射,不用在类里面写url了,配置进一步简化。
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
看下面的类映射common/find
@Controller
public class CommonController {
@Autowired
private CommonService commonService;
@RequestMapping
public void find(@RequestParam("sqlid") String sqlid,
WebRequest webRequest, ModelMap modelMap) {
Map map = new HashMap();
Map<String, String[]> parameter = webRequest.getParameterMap();
//把Map<String, String[]>转成Map<String, String>
Iterator<Entry<String, String[]>> it = parameter.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String[]> pairs = it.next();
if(pairs.getValue().length > 0)
map.put(pairs.getKey(), pairs.getValue()[0]);
}
//查询
List list = commonService.find(sqlid, map);
modelMap.addAttribute("result", list);
}
}
方法参数不仅可以加WebRequest,还有其它好多可以加,比如做个服务器端验证或处理Session什么的,可方便了,加上就能用。以前听到介绍某种语言效率高,写很少可以办很多事,也不以为然。现在使用其它语言机会多了,看到一些便利的地方很是喜欢。回过头来再看java及其框架,我的要求是配置再少些,代码再少些。spring注解加默认约定,减少了配置,减少了我们要写的代码量,java开发的效率提高了。
2010-4-16:现在感觉做主要是查询的应用很爽,java代码只有二百行左右(需求不简单,五个模块,各种查询)ibatisl配置了十几个查询sql,条件与ajax发过来的对应。
var settings = {sid:"getpp",exchange:2,limit:50,cc_date:$("#date_input").val()};
$.ajax({type: "POST",url:"../find.json", data:settings, success:function(json){
//create grid
},dataType:"json",error:function () {
alert('服务器错误,请稍后重试');
}
});
<select id="getpp" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, (
SELECT company,SUM(amount) amount FROM XXXX WHERE
<isNotEmpty property="date">
date=#date#
</isNotEmpty>
<isEmpty property="date">
date between #start_date# and #end_date#
</isEmpty>
<isNotEmpty property="code">
and code=#code#
</isNotEmpty>
<isEmpty property="code">
and code like CONCAT('%', #name#, '%')
</isEmpty>
and EXCHANGE=#exchange#
GROUP BY company
ORDER BY amount DESC LIMIT #limit#
) t
</select>
js代码写了六七百行,用了jqgrid表格和flot画图。如果是不刷新页面的应用,要使用经过考验的组件,那些没名的小组件不能用,内存会不停的增涨。
分享到:
相关推荐
这些操作都是通过Ajax请求触发,由Struts2控制器处理,再通过Spring管理的iBatis DAO执行相应的数据库操作,最后将结果以JSON或其他格式返回,由jQuery动态更新页面显示。 此外,项目的代码结构可能包括以下几个...
Ajax则通过JavaScript(可能是jQuery库)与后台进行通信,发送和接收JSON格式的数据。 6. **源代码结构**:压缩包中的"StrutsTest"很可能包含了项目的源代码结构,包括Web应用目录结构(WEB-INF目录下的配置文件、...
- **JSON示例**:通过实例展示如何在Struts2中使用JSON。 - **Struts2与JSON示例**:详细介绍如何在Struts2中集成JSON处理。 #### 十二、集成Hibernate - **系统总体设计**:从整体角度出发,描述如何设计包含...
- **16.6 jQuery处理JSON**:jQuery处理JSON数据的方法。 #### 十七至十九章 - **实战案例**:通过具体的项目案例进一步加深对Struts2的理解,包括投票管理系统、无纸化办公管理系统、数据采集系统等。 以上内容...
综上所述,这个压缩包中的 "springibatis" 文件可能是 Spring 和 iBatis 的整合示例,Spring 提供了依赖注入和事务管理等功能,使得 Struts2 和 iBatis 的集成更加便捷和稳定。通过学习这个例子,开发者可以深入理解...
- **集成jQuery**:介绍jQuery在Struts2中的应用,包括CSS操作、DOM操作等内容。 #### 十三、案例分析 - **投票管理系统**:通过具体的案例分析,展示了Struts2在实际项目中的应用。 - **无纸化办公管理系统**:另...
- **集成jQuery**:jQuery是一个快速、简洁的JavaScript库,本书提供了关于如何在Struts2项目中使用jQuery的指导。 #### 十三、实战案例分析 - **投票管理系统**:通过一个完整的投票管理系统的开发案例,展示了...
Struts2能够与Spring、Hibernate、iBatis和jQuery等流行框架无缝集成,构建出功能丰富且高度可扩展的应用系统。 通过以上概览,我们可以看出Struts2不仅是一个功能全面的Web开发框架,同时也为开发者提供了高度的...