📄 complexportletapplicationcontext.java
字号:
/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.web.portlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.springframework.beans.BeansException;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.Ordered;
import org.springframework.mock.web.portlet.MockPortletConfig;
import org.springframework.mock.web.portlet.MockPortletContext;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.portlet.bind.PortletRequestBindingException;
import org.springframework.web.portlet.context.PortletRequestHandledEvent;
import org.springframework.web.portlet.context.StaticPortletApplicationContext;
import org.springframework.web.portlet.handler.ParameterHandlerMapping;
import org.springframework.web.portlet.handler.ParameterMappingInterceptor;
import org.springframework.web.portlet.handler.PortletModeHandlerMapping;
import org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping;
import org.springframework.web.portlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.portlet.handler.SimplePortletHandlerAdapter;
import org.springframework.web.portlet.handler.SimplePortletPostProcessor;
import org.springframework.web.portlet.handler.UserRoleAuthorizationInterceptor;
import org.springframework.web.portlet.multipart.DefaultMultipartActionRequest;
import org.springframework.web.portlet.multipart.MultipartActionRequest;
import org.springframework.web.portlet.multipart.PortletMultipartResolver;
import org.springframework.web.portlet.mvc.Controller;
import org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter;
/**
* @author Juergen Hoeller
* @author Mark Fisher
*/
public class ComplexPortletApplicationContext extends StaticPortletApplicationContext {
public void refresh() throws BeansException {
registerSingleton("standardHandlerAdapter", SimpleControllerHandlerAdapter.class);
registerSingleton("portletHandlerAdapter", SimplePortletHandlerAdapter.class);
registerSingleton("myHandlerAdapter", MyHandlerAdapter.class);
registerSingleton("viewController", ViewController.class);
registerSingleton("editController", EditController.class);
registerSingleton("helpController1", HelpController1.class);
registerSingleton("helpController2", HelpController2.class);
registerSingleton("testController1", TestController1.class);
registerSingleton("testController2", TestController2.class);
registerSingleton("requestLocaleCheckingController", RequestLocaleCheckingController.class);
registerSingleton("localeContextCheckingController", LocaleContextCheckingController.class);
registerSingleton("exceptionThrowingHandler1", ExceptionThrowingHandler.class);
registerSingleton("exceptionThrowingHandler2", ExceptionThrowingHandler.class);
registerSingleton("unknownHandler", Object.class);
registerSingleton("myPortlet", MyPortlet.class);
registerSingleton("portletMultipartResolver", MockMultipartResolver.class);
registerSingleton("portletPostProcessor", SimplePortletPostProcessor.class);
registerSingleton("testListener", TestApplicationListener.class);
ConstructorArgumentValues cvs = new ConstructorArgumentValues();
cvs.addIndexedArgumentValue(0, new MockPortletContext());
cvs.addIndexedArgumentValue(1, "complex");
registerBeanDefinition("portletConfig", new RootBeanDefinition(MockPortletConfig.class, cvs, null));
UserRoleAuthorizationInterceptor userRoleInterceptor = new UserRoleAuthorizationInterceptor();
userRoleInterceptor.setAuthorizedRoles(new String[] {"role1", "role2"});
ParameterHandlerMapping interceptingHandlerMapping = new ParameterHandlerMapping();
interceptingHandlerMapping.setParameterName("interceptingParam");
ParameterMappingInterceptor parameterMappingInterceptor = new ParameterMappingInterceptor();
parameterMappingInterceptor.setParameterName("interceptingParam");
List interceptors = new ArrayList();
interceptors.add(parameterMappingInterceptor);
interceptors.add(userRoleInterceptor);
interceptors.add(new MyHandlerInterceptor1());
interceptors.add(new MyHandlerInterceptor2());
MutablePropertyValues pvs = new MutablePropertyValues();
Map portletModeMap = new ManagedMap();
portletModeMap.put("view", new RuntimeBeanReference("viewController"));
portletModeMap.put("edit", new RuntimeBeanReference("editController"));
pvs.addPropertyValue("portletModeMap", portletModeMap);
pvs.addPropertyValue("interceptors", interceptors);
registerSingleton("handlerMapping3", PortletModeHandlerMapping.class, pvs);
pvs = new MutablePropertyValues();
Map parameterMap = new ManagedMap();
parameterMap.put("test1", new RuntimeBeanReference("testController1"));
parameterMap.put("test2", new RuntimeBeanReference("testController2"));
parameterMap.put("requestLocaleChecker", new RuntimeBeanReference("requestLocaleCheckingController"));
parameterMap.put("contextLocaleChecker", new RuntimeBeanReference("localeContextCheckingController"));
parameterMap.put("exception1", new RuntimeBeanReference("exceptionThrowingHandler1"));
parameterMap.put("exception2", new RuntimeBeanReference("exceptionThrowingHandler2"));
parameterMap.put("myPortlet", new RuntimeBeanReference("myPortlet"));
parameterMap.put("unknown", new RuntimeBeanReference("unknownHandler"));
pvs.addPropertyValue("parameterMap", parameterMap);
pvs.addPropertyValue("parameterName", "myParam");
pvs.addPropertyValue("order", "2");
registerSingleton("handlerMapping2", ParameterHandlerMapping.class, pvs);
pvs = new MutablePropertyValues();
Map innerMap = new ManagedMap();
innerMap.put("help1", new RuntimeBeanReference("helpController1"));
innerMap.put("help2", new RuntimeBeanReference("helpController2"));
Map outerMap = new ManagedMap();
outerMap.put("help", innerMap);
pvs.addPropertyValue("portletModeParameterMap", outerMap);
pvs.addPropertyValue("order", "1");
registerSingleton("handlerMapping1", PortletModeParameterHandlerMapping.class, pvs);
pvs = new MutablePropertyValues();
pvs.addPropertyValue("order", "1");
pvs.addPropertyValue("exceptionMappings",
"java.lang.IllegalAccessException=failed-illegalaccess\n" +
"PortletRequestBindingException=failed-binding\n" +
"UnavailableException=failed-unavailable");
pvs.addPropertyValue("defaultErrorView", "failed-default-1");
registerSingleton("exceptionResolver", SimpleMappingExceptionResolver.class, pvs);
pvs = new MutablePropertyValues();
pvs.addPropertyValue("order", "0");
pvs.addPropertyValue("exceptionMappings",
"java.lang.Exception=failed-exception\n" +
"java.lang.RuntimeException=failed-runtime");
List mappedHandlers = new ManagedList();
mappedHandlers.add(new RuntimeBeanReference("exceptionThrowingHandler1"));
pvs.addPropertyValue("mappedHandlers", mappedHandlers);
pvs.addPropertyValue("defaultErrorView", "failed-default-0");
registerSingleton("handlerExceptionResolver", SimpleMappingExceptionResolver.class, pvs);
addMessage("test", Locale.ENGLISH, "test message");
addMessage("test", Locale.CANADA, "Canadian & test message");
addMessage("test.args", Locale.ENGLISH, "test {0} and {1}");
super.refresh();
}
public static class TestController1 implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {
response.setRenderParameter("result", "test1-action");
}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
return null;
}
}
public static class TestController2 implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
response.setProperty("result", "test2-view");
return null;
}
}
public static class ViewController implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
return new ModelAndView("someViewName", "result", "view was here");
}
}
public static class EditController implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {
response.setRenderParameter("param", "edit was here");
}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
return new ModelAndView(request.getParameter("param"));
}
}
public static class HelpController1 implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {
response.setRenderParameter("param", "help1 was here");
}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
return new ModelAndView("help1-view");
}
}
public static class HelpController2 implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) {
response.setRenderParameter("param", "help2 was here");
}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response) throws Exception {
return new ModelAndView("help2-view");
}
}
public static class RequestLocaleCheckingController implements Controller {
public void handleActionRequest(ActionRequest request, ActionResponse response) throws PortletException {
if (!Locale.CANADA.equals(request.getLocale())) {
throw new PortletException("Incorrect Locale in ActionRequest");
}
}
public ModelAndView handleRenderRequest(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -