首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖BroadleafCategoryController [宽叶商务]

如何覆盖BroadleafCategoryController [宽叶商务]
EN

Stack Overflow用户
提问于 2018-06-26 04:41:42
回答 1查看 112关注 0票数 0

当我尝试覆盖BroadleafCategoryController handleRequest方法时,对我来说一切都很好。但是,当我尝试使用Device参数调用如下所示的相同方法来标识用户设备时

在我的Java类CategoryController.java中

代码语言:javascript
复制
@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)时,我将Category对象的值作为NULL。

代码语言:javascript
复制
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;
            }

在带有@Configuration注释的类中配置了CategoryHandlerMapping (由Broadleaf Commerce提供),并在带有@Bean注释的方法中创建了对象。

代码语言:javascript
复制
@Bean
public HandlerMapping categoryHandlerMapping() {
    CategoryHandlerMapping mapping = new CategoryHandlerMapping();
    mapping.setOrder(5);
    return mapping;
}

注:-所有与设备相关的配置(Spring-Mobile)都很好,如果我遗漏了任何像applicationContext.xml这样的xml配置,请让我知道?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-29 07:55:00

category控制器稍有不同,并且不是由RequestMappingHandlerMapping解析的(它解析您的@RequestMapping片段)。相反,正如您所提到的,调用CategoryControllerhandleRequest()方法的唯一方式是通过CategoryHandlerMapping。这就是处理类别URL的部分。

看起来您只是在尝试找出类别页面上的当前Device。Spring Mobile有一个简单的DeviceUtils.getCurrentDevice(request)就能做到这一点的工具。所以:

handleRequest()

  • Rewrite
  1. 中删除@RequestMapping,如下所示:

@Controller("blCategoryController")公有类CategoryController扩展了BroadleafCategoryController {私有静态最终记录器记录器=BroadleafCategoryController公有ModelAndView handleRequest(HttpServletRequest请求,HttpServletResponse响应)抛出异常{ Device currentDevice = DeviceUtils.getCurrentDevice(request);return super.handleRequest(request,response);} }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51031499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档