当我尝试覆盖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)时,我将Category对象的值作为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;
}在带有@Configuration注释的类中配置了CategoryHandlerMapping (由Broadleaf Commerce提供),并在带有@Bean注释的方法中创建了对象。
@Bean
public HandlerMapping categoryHandlerMapping() {
CategoryHandlerMapping mapping = new CategoryHandlerMapping();
mapping.setOrder(5);
return mapping;
}注:-所有与设备相关的配置(Spring-Mobile)都很好,如果我遗漏了任何像applicationContext.xml这样的xml配置,请让我知道?提前感谢!
发布于 2018-07-29 07:55:00
category控制器稍有不同,并且不是由RequestMappingHandlerMapping解析的(它解析您的@RequestMapping片段)。相反,正如您所提到的,调用CategoryController的handleRequest()方法的唯一方式是通过CategoryHandlerMapping。这就是处理类别URL的部分。
看起来您只是在尝试找出类别页面上的当前Device。Spring Mobile有一个简单的DeviceUtils.getCurrentDevice(request)就能做到这一点的工具。所以:
从handleRequest()
@RequestMapping,如下所示:@Controller("blCategoryController")公有类CategoryController扩展了BroadleafCategoryController {私有静态最终记录器记录器=BroadleafCategoryController公有ModelAndView handleRequest(HttpServletRequest请求,HttpServletResponse响应)抛出异常{ Device currentDevice = DeviceUtils.getCurrentDevice(request);return super.handleRequest(request,response);} }
https://stackoverflow.com/questions/51031499
复制相似问题