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"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/portlets/easyportlet/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Default ExceptionHandler -->
<bean id="defaultExceptionHandler"
class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver">
<property name="order" 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
class="org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<bean
class="org.springframework.web.portlet.handler.ParameterMappingInterceptor" />
</property>
</bean>
<bean
class="com.sillycat.easyportlet.web.AddressRedirectController">
<property name="addressManager" ref="addressManager" />
</bean>
<bean
class="com.sillycat.easyportlet.web.AddressEditController">
<property name="addressManager" ref="addressManager" />
</bean>
<bean id="addressManager" class="com.sillycat.easyportlet.services.impl.AddressManagerImpl" />
</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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值