找不到broadleaf自定义文件页面

时间:2014-06-02 07:37:37

标签: spring-mvc broadleaf-commerce

我想添加我的自定义文件未找到页面,为此我在web.xml中添加了以下代码

<error-page>
   <error-code>404</error-code>
   <location>/test</location>
</error-page>

并创建了一个带有请求映射的控制器&#34; / test&#34;内包装&#34; com.mycompany.controller.content&#34;返回视图字符串&#34; test&#34;。我还创建了一个&#34; test.html&#34;内部&#34;模板/内容&#34;夹。现在,当我点击一个不存在的URL时,我得到了以下错误

SEVERE: Servlet.service() for servlet mycompany threw exception
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.broadleafcommerce.core.catalog.domain.CategoryImpl.allChildCategoryXrefs, could not initialize proxy - no Session
   at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
   at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
   at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
   at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
   at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)
   at org.broadleafcommerce.core.catalog.domain.CategoryImpl.getChildCategoryXrefs(CategoryImpl.java:616)
   at org.broadleafcommerce.core.web.processor.CategoriesProcessor.modifyModelAttributes(CategoriesProcessor.java:84)
   at org.broadleafcommerce.common.web.dialect.AbstractModelVariableModifierProcessor.processElement(AbstractModelVariableModifierProcessor.java:57)
   at org.thymeleaf.processor.element.AbstractElementProcessor.doProcess(AbstractElementProcessor.java:74)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
   at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
   at org.thymeleaf.dom.Node.processNode(Node.java:971)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.Document.process(Document.java:93)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
   at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
   at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
   at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
   at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
   at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
   at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:421)
   at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:342)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:662)
May 25, 2014 1:29:45 PM org.apache.catalina.core.StandardHostValve custom
SEVERE: Exception Processing ErrorPage[errorCode=404, location=/test]
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.broadleafcommerce.core.web.processor.CategoriesProcessor' (layout/partials/header:45)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
   at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
   at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
   at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
   at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:421)
   at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:342)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:662)
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.broadleafcommerce.core.web.processor.CategoriesProcessor' (layout/partials/header:45)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:223)
   at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
   at org.thymeleaf.dom.Node.processNode(Node.java:971)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
   at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
   at org.thymeleaf.dom.Node.processNode(Node.java:990)
   at org.thymeleaf.dom.Document.process(Document.java:93)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
   at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
   at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
   at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
   at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
   at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
   ... 20 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.broadleafcommerce.core.catalog.domain.CategoryImpl.allChildCategoryXrefs, could not initialize proxy - no Session
   at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
   at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
   at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
   at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
   at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)
   at org.broadleafcommerce.core.catalog.domain.CategoryImpl.getChildCategoryXrefs(CategoryImpl.java:616)
   at org.broadleafcommerce.core.web.processor.CategoriesProcessor.modifyModelAttributes(CategoriesProcessor.java:84)
   at org.broadleafcommerce.common.web.dialect.AbstractModelVariableModifierProcessor.processElement(AbstractModelVariableModifierProcessor.java:57)
   at org.thymeleaf.processor.element.AbstractElementProcessor.doProcess(AbstractElementProcessor.java:74)
   at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
   ... 54 more

在此之后,我使用以下代码来解决异常

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>       
</filter-mapping>

以前的异常已经解决但是出现了一个新的异常,如下所示

SEVERE: Servlet.service() for servlet mycompany threw exception
java.lang.NullPointerException
   at org.broadleafcommerce.common.web.BroadleafRequestCustomerResolverImpl.setCustomer(BroadleafRequestCustomerResolverImpl.java:62)
   at org.broadleafcommerce.profile.web.core.CustomerState.setCustomer(CustomerState.java:52)
   at org.broadleafcommerce.profile.web.core.security.CustomerStateRequestProcessor.process(CustomerStateRequestProcessor.java:134)
   at org.broadleafcommerce.profile.web.core.security.CustomerStateFilter.doFilter(CustomerStateFilter.java:55)
   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

在调查此异常时,我注意到&#34; setCustomer&#34;方法&#34; BroadleafRequestCustomerResolverImpl&#34; class被调用两次,请求引用在第二次调用后变为null。

1 个答案:

答案 0 :(得分:1)

问题是,当通过tomcat重定向时,您没有在视图中打开会话。 因此,当您从控制器返回模板时,您必须确保在该模板中没有提取实体或延迟关系。

因此,作为快速的解决方法或结论,我建议您使用三种不同的解决方案:

  1. 您可以使用不使用任何实体作为模型的模板( 也不会把它变得很懒,因为它不会起作用。)
  2. 您可以在模型中添加DTO而不是实体,并使用此方法 在视图中不需要打开会话。
  3. 您可以在不使用控制器/模板的情况下使用简单的jsp / html 发动机。
  4. 我个人更喜欢解决方案2.