Как переопределить BroadleafCategoryController [Broadleaf Commerce] - PullRequest
0 голосов
/ 25 июня 2018

Когда я пытаюсь переопределить метод BroadleafCategoryController handleRequest, у меня все работает нормально.Но когда я пытаюсь вызвать тот же метод, как показано ниже, с параметром Device, чтобы идентифицировать пользовательское устройство

В моем классе Java CategoryController.java

@Controller("blCategoryController")
        public class CategoryController extends BroadleafCategoryController {

            private static final Logger logger = LoggerFactory.getLogger(CategoryController.class);

            @RequestMapping("/")
            public ModelAndView handleRequest(Device currentDevice, HttpServletRequest request, HttpServletResponse response) throws Exception {

        return super.handleRequest(request, response);

            }

        }

тогда, когда оно входит внутрь суперМетод (handleRequest) я получаю значение объекта категории как NULL.

Category category = (Category) request.getAttribute(CategoryHandlerMapping.CURRENT_CATEGORY_ATTRIBUTE_NAME);
The above value should have been set through CategoryHandlerMapping

        public class CategoryHandlerMapping extends BLCAbstractHandlerMapping {
                    public static final String CURRENT_CATEGORY_ATTRIBUTE_NAME = "category";

            protected String defaultTemplateName = "catalog/category";

            private String controllerName = "blCategoryController";


            @Override
            protected Object getHandlerInternal(HttpServletRequest request) throws Exception {
                Category category = null;
                if (allowCategoryResolutionUsingIdParam()) {
                    category = findCategoryUsingIdParam(request);
                }

                if (category == null) {
                    category = findCategoryUsingUrl(request);
                }

                if (category != null) {
                    request.setAttribute(CURRENT_CATEGORY_ATTRIBUTE_NAME, category);
                    return controllerName;
                }

                return null;
            }

CategoryHandlerMapping (предоставленный Broadleaf Commerce) был настроен внутри класса с аннотацией @Configuration, и объект создан внутриметод с аннотацией @Bean.

@Bean
public HandlerMapping categoryHandlerMapping() {
    CategoryHandlerMapping mapping = new CategoryHandlerMapping();
    mapping.setOrder(5);
    return mapping;
}

Примечание: - Все настройки, относящиеся к устройству (Spring-Mobile), в порядке. Пожалуйста, дайте мне знать, если мне не хватает какой-либо конфигурации xml, например applicationContext.xml?Заранее спасибо !!!

1 Ответ

0 голосов
/ 29 июля 2018

Контроллер категории немного отличается, и не разрешается RequestMappingHandlerMapping (что и разрешает ваш @RequestMapping фрагмент).Вместо этого, как вы упомянули, единственный способ handleRequest() метода CategoryController вызывается через CategoryHandlerMapping. То, что - это элемент, который обрабатывает URL категории.

Похоже, вы просто пытаетесь выяснить текущее значение Device на странице категории.У Spring Mobile есть возможность сделать это просто с помощью DeviceUtils.getCurrentDevice(request).Итак:

  1. Удалите @RequestMapping из handleRequest()
  2. Перепишите свой метод так:

    @Controller("blCategoryController")
    public class CategoryController extends BroadleafCategoryController {
    
        private static final Logger logger = LoggerFactory.getLogger(CategoryController.class);
    
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            Device currentDevice = DeviceUtils.getCurrentDevice(request);
            return super.handleRequest(request, response);
        }
    
    }
    
...