首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring的portlet改善(一)支持CURD标注controller

2012-11-19 
spring的portlet改进(一)支持CURD标注controllerspring的portlet改进(一)支持CURD标注controller以前的por

spring的portlet改进(一)支持CURD标注controller
spring的portlet改进(一)支持CURD标注controller

以前的portlet是写的SimpleController,实现起来有点不方便。现在改成标注annotation的Controller了。可以让配置和代码都更清晰一些。
以前写的portlet都是一年以前的事情了。这里也详细描述一下:
首先是WEB-INF/web.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.4">
<display-name>easyportlet</display-name>
<!-- 设定Spring的根上下文 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
       classpath:/applicationContext*.xml
       /WEB-INF/*servlet.xml
      </param-value>
</context-param>
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设定ViewRendererServlet -->
<servlet>
   <servlet-name>ViewRendererServlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>ViewRendererServlet</servlet-name>
   <url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>
<!-- 设定加载一个Portlet的Servlet, 该配置为Pluto所需-->
<servlet>
   <servlet-name>easyportlet</servlet-name>
   <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
   <init-param>
    <param-name>portlet-name</param-name>
    <param-value>easyportlet</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>easyportlet</servlet-name>
   <url-pattern>/PlutoInvoker/easyportlet</url-pattern>
</servlet-mapping>
</web-app>
我的WEB-INF/portlet.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
   <portlet-name>easyportlet</portlet-name>
   <display-name>easyportlet</display-name>
   <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
   <expiration-cache>-1</expiration-cache>
   <init-param>
    <name>contextConfigLocation</name>
    <value>classpath:/applicationContext-easyportlet.xml</value>
   </init-param>
   <supports>
    <mime-type>text/html</mime-type>
    <portlet-mode>view</portlet-mode>
    <portlet-mode>edit</portlet-mode>
    <portlet-mode>help</portlet-mode>
   </supports>
   <portlet-info>
    <title>easyportlet</title>
   </portlet-info>
</portlet>
</portlet-app>
其中的applicationContext-easyportlet.xml就是我的核心配置文件了,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<bean id="viewResolver"
   />
   <property name="prefix" value="/WEB-INF/portlets/easyportlet/" />
   <property name="suffix" value=".jsp" />
</bean>
<!-- Default ExceptionHandler -->
<bean id="defaultExceptionHandler"
   value="10" />
   <property name="defaultErrorView" value="error" />
   <property name="exceptionMappings">
    <props>
     <prop key="javax.portlet.UnavailableException">
      unavailable
         </prop>
     <prop key="java.lang.Exception">error</prop>
    </props>
   </property>
</bean>
<bean
/>
   </property>
</bean>
<bean
   ref="addressManager" /> 
</bean>
<bean
   ref="addressManager" />
</bean>
<bean id="addressManager" />
</beans>
这里的两个Controller中就是用了标注来暴露方法,其中的AddressRedirectController.java是对应给portal的VIEW模式用的,AddressEditController.java是对应给portal的EDIT模式用的。
AddressEditController.java文件如下:
package com.sillycat.easyportlet.web;

import java.util.List;

import javax.portlet.ActionResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.sillycat.easyportlet.model.Address;
import com.sillycat.easyportlet.services.AddressManager;

@Controller
@RequestMapping("EDIT")
public class AddressEditController {
private AddressManager addressManager;
@RequestMapping
// default (action=list)
public String listAddresses(Model model) {
   List<Address> addresses = addressManager.list();
   model.addAttribute("addresses", addresses);
   return "addressList";
}
@RequestMapping(params = "action=add")
// render phase
public String showAddressForm(Model model) {
   Address address = null;
   address = new Address();
   model.addAttribute("address", address);
   return "addressAdd";
}
@RequestMapping(params = "action=edit")
// render phase
public String editAddress(@RequestParam("id") Integer id, Model model) {
   model.addAttribute("address", addressManager.get(id));
   return "addressEdit";
}
@RequestMapping(params = "action=save")
// action phase
public void populateAddress(Address address, BindingResult result,
    ActionResponse response) {
   if (address != null) {
    if (address.getId() != null && address.getId().intValue() != 0) {
     addressManager.update(address);
    } else {
     addressManager.create(address);
    }
   }
   response.setRenderParameter("action", "list");
}
@RequestMapping(params = "action=delete")
public void removeAddress(@RequestParam("id") Integer id,
    ActionResponse response) {
   addressManager.delete(id);
   response.setRenderParameter("action", "list");
}
public void setAddressManager(AddressManager addressManager) {
   this.addressManager = addressManager;
}
}
AddressRedirectController.java文件如下:
package com.sillycat.easyportlet.web;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.sillycat.easyportlet.model.Address;
import com.sillycat.easyportlet.services.AddressManager;
@Controller
@RequestMapping("VIEW")
public class AddressRedirectController {
private AddressManager addressManager;
@RequestMapping
// default render (action=list)
public String listAddresses(Model model) {
   List<Address> addresses = addressManager.list();
   model.addAttribute("addresses", addresses);
   return "addressListView";
}
@RequestMapping(params = "action=view")
// render phase
public String viewAddress(@RequestParam("id") Integer id, Model model) {
   Address address = null;
   address = addressManager.get(id);
   model.addAttribute("address", address);
   return "addressView";
}
public void setAddressManager(AddressManager addressManager) {
   this.addressManager = addressManager;
}
}

热点排行