@ModelAttribute减少约定俗成,写得更大白话一点,入门的时候容易懂。

This commit is contained in:
Calvin
2012-12-17 11:02:23 +08:00
parent 9bbe29014a
commit fa8a54bb64
8 changed files with 35 additions and 33 deletions
@@ -40,12 +40,15 @@ public class ProfileController {
return "redirect:/";
}
@ModelAttribute("preloadUser")
public User getUser(@RequestParam(value = "id", required = false) Long id) {
/**
* 所有RequestMapping方法调用前的Model准备方法, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此仅在update时实际执行.
*/
@ModelAttribute
public void getUser(@RequestParam(value = "id", required = false) Long id, Model model) {
if (id != null) {
return accountService.getUser(id);
model.addAttribute("preloadUser", accountService.getUser(id));
}
return null;
}
/**
@@ -58,14 +58,13 @@ public class UserAdminController {
}
/**
* 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此本方法在该方法中执行.
* 所有RequestMapping方法调用前的Model准备方法, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此仅在update时实际执行.
*/
@ModelAttribute("preloadUser")
public User getUser(@RequestParam(value = "id", required = false) Long id) {
@ModelAttribute
public void getUser(@RequestParam(value = "id", required = false) Long id, Model model) {
if (id != null) {
return accountService.getUser(id);
model.addAttribute("preloadUser", accountService.getUser(id));
}
return null;
}
}
@@ -107,15 +107,14 @@ public class TaskController {
}
/**
* 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出Task对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此本方法在该方法中执行.
* 所有RequestMapping方法调用前的Model准备方法, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出Task对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此仅在update时实际执行.
*/
@ModelAttribute("preloadTask")
public Task getTask(@RequestParam(value = "id", required = false) Long id) {
@ModelAttribute()
public void getTask(@RequestParam(value = "id", required = false) Long id, Model model) {
if (id != null) {
return taskService.getTask(id);
model.addAttribute("preloadTask", taskService.getTask(id));
}
return null;
}
/**
@@ -20,9 +20,6 @@
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 将无法mapping到Controller的path交给default servlet handler处理 -->
<mvc:default-servlet-handler/>
<!-- 定义JSP文件的位置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
@@ -30,6 +27,10 @@
<property name="suffix" value=".jsp"/>
</bean>
<!-- 定义无Controller的path<->view直接映射 -->
<!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL-->
<mvc:default-servlet-handler/>
<!-- 定义无需Controller的url<->view直接映射 -->
<mvc:view-controller path="/" view-name="redirect:/task"/>
</beans>
@@ -99,15 +99,14 @@ public class UserController {
}
/**
* 使用@ModelAttribute, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此本方法在该方法中执行.
* 所有RequestMapping方法调用前的Model准备方法, 实现Struts2 Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此仅在update时实际执行.
*/
@ModelAttribute("preloadUser")
public User getUser(@RequestParam(value = "id", required = false) Long id) {
@ModelAttribute
public void getUser(@RequestParam(value = "id", required = false) Long id, Model model) {
if (id != null) {
return accountService.getUser(id);
model.addAttribute("preloadUser", accountService.getUser(id));
}
return null;
}
/**
@@ -21,7 +21,7 @@
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 根据后缀名决定Content-Type及相应的View -->
<!-- 根据URL后缀自动判定Content-Type及相应的View -->
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes" >
<value>
@@ -37,10 +37,10 @@
<property name="suffix" value=".jsp"/>
</bean>
<!-- 将无法mapping到Controller的path交给default servlet handler处理 -->
<!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL-->
<mvc:default-servlet-handler/>
<!-- 定义无Controller的path<->view直接映射 -->
<!-- 定义无需Controller的url<->view直接映射 -->
<mvc:view-controller path="/" view-name="index"/>
<mvc:view-controller path="/web/mashup-client" view-name="/web/mashup-client"/>
@@ -14,23 +14,23 @@
<body>
<h1>Web Service 演示</h1>
<h2>1. 传统SOAP Web Service演示</h2>
<h2>1. 传统的SOAP Web Service演示</h2>
<ul>
<li>服务端是基于CXF的JAX-WS演示, 见CXF自动生成的<a href="${ctx}/cxf/">wsdl文件列表</a></li>
<li>客户端见Functional Test用例, 或SoapUI工具.</li>
</ul>
<h2>2. 基于JAX-RS实现的Restful演示</h2>
<h2>2. 基于JAX-RS标准的Restful演示</h2>
<ul>
<li>服务端是基于CXF的JAX-WS演示, CXF自动生成的<a href="${ctx}/cxf/">wadl文件列表</a></li>
<li>演示地址:<a href="${ctx}/cxf/rest/user/1.xml">/cxf/rest/user/1.xml</a> 与 <a href="${ctx}/cxf/rest/user/1.json">/cxf/rest/user/1.json</a></li>
<li>演示地址:<a href="${ctx}/cxf/jaxrs/user/1.xml">/cxf/jaxrs/user/1.xml</a> 与 <a href="${ctx}/cxf/jaxrs/user/1.json">/cxf/jaxrs/user/1.json</a></li>
</ul>
<h2>3. SpringMVC Restful Service高级演示</h2>
服务端:
<ul>
<li>集成Shiro进行HttpBasic的认证 </li>
<li>XML与JSON两种格式的序列化</li>
<li>XML与JSON两种格式的序列化,根据Url自动判定Content-Type</li>
<li>演示地址:<a href="${ctx}/api/v1/user/1.xml">/api/v1/user/1.xml</a> 与 <a href="${ctx}/api/v1/user/1.json">/api/v1/user/1.json</a> (用浏览器访问时需要认证admin/admin)</li>
</ul>
客户端:
@@ -6,6 +6,7 @@
<head>
<title>跨域名Mashup演示</title>
<script type="text/javascript">
//相对于本地文件来说,服务器地址就是跨域的地址.
var remoteUrl = "http://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}";
//使用JQuery ajax jsonp方式跨域名访问内容