1

シングルビューアプリケーションでvaadin 7.7.7、spring-boot 1.5ユーザーからuriフラグメントhttps:/ tld /#!category-name-1をチェックし、カテゴリアイテムを表示するに存在しない場合はvaadin + spring boot:要求のエラーページに転送できません

VaadinService.getCurrentResponse().sendError(404, "page not found!"); 

しかし、私は(埋め込まTomcatで)更新スプリングブート1.5とvaadin 7.7.7の後にエラーが発生しました:

Cannot forward to error page for request [/vaadinServlet/UIDL/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false 

にはどうすればvaadinからのHTTPエラーページを送信することができますユーザーに?

ErrorPageCutomizer.java

@Component 
public class ErrorPageCutomizer implements EmbeddedServletContainerCustomizer { 
    @Override 
    public void customize(ConfigurableEmbeddedServletContainer container) { 
     container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404")); 
     container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500")); 
    } 
} 

RestController.java

import org.springframework.boot.autoconfigure.web.ErrorController; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class ErrorHandlingController implements ErrorController { 

    private static final String PATH = "/error"; 

    @RequestMapping(value = PATH + "/404") 
    public String error404() { 
     return "<div style='font-weight:bold; margin-top:200px; text-align:center; font-size:160%;'>Page not found...<br><a href=\"https://tld\">to home</a></div>"; 
    } 

    @RequestMapping(value = PATH + "/500") 
    public String error500() { 
     return "<div style='font-weight:bold; margin-top:200px; text-align:center; font-size:160%;'>500 Internal server error...</div>"; 
    } 

    @Override 
    public String getErrorPath() { 
     return PATH; 
    } 
} 

答えて

0

Soliutionされました:

@Configuration 
public class AppInitializer implements WebApplicationInitializer { 

    @Bean 
    public ErrorPageFilter errorPageFilter() { 
     return new ErrorPageFilter(); 
    } 

    @Bean 
    public FilterRegistrationBean disableSpringBootErrorFilter(ErrorPageFilter filter) { 
     FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 
     filterRegistrationBean.setFilter(filter); 
     filterRegistrationBean.setEnabled(false); 
     return filterRegistrationBean; 
    } 
} 
+1

Vaadin 8.0.5およびSpringブート1.5.3では機能しません –

-1

あなたがSystemMessagesProviderを試してみました。そのプロバイダでは、あなたがエラーのさまざまなerrorUrlを定義することができます。

public class YourServlet extends VaadinServlet 
{ 
    @Override 
    protected void servletInitialized() throws ServletException 
    { 
     super.servletInitialized(); 

     getService().setSystemMessagesProvider(new SystemMessagesProvider() 
     { 
      @Override 
      public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) 
      { 
       final CustomizedSystemMessages c = new CustomizedSystemMessages(); 
       final String errorUrl = "<url to errorpage>"; 
       c.setSessionExpiredURL(errorUrl); 
       c.setSessionExpiredNotificationEnabled(false); 

       c.setAuthenticationErrorURL(errorUrl); 
       c.setAuthenticationErrorNotificationEnabled(false); 

       c.setCommunicationErrorURL(errorUrl); 
       c.setCommunicationErrorNotificationEnabled(false); 

       c.setCookiesDisabledURL(errorUrl); 
       c.setCookiesDisabledNotificationEnabled(false); 

       c.setInternalErrorURL(errorUrl); 
       c.setInternalErrorNotificationEnabled(false); 

       c.setSessionExpiredURL(errorUrl); 
       c.setSessionExpiredNotificationEnabled(false); 
       return c; 
      } 
     }); 
    } 
+0

質問は「私は、ユーザーにvaadinからのHTTPエラーページを送信するにはどうすればよい?」でした。 「Springでエラーページを送信するにはどうしたらいいですか?私の提案はまさにこれです。なぜ私の答えがダウングレードされたのか説明していただければ幸いです。 –

+0

私が送る場合:VaadinService.getCurrentResponse()。sendError(404、 "ページが見つかりません!"); コンソールで次のエラーが発生しました: "レスポンスがすでにコミットされているため、リクエスト[/]のエラーページに転送できません。その結果、レスポンスのステータスコードが間違っている可能性があります。 com.ibm.ws.webcontainer.invokeFlushAfterServiceをfalseに設定してこの問題を解決できる可能性があります。 " sys msgのカスタマイズは意味しません。 –

関連する問題