如何使用Spring Boot显示有关404错误的Vaadin UI?

时间:2016-09-13 13:57:47

标签: spring spring-boot vaadin

我正在尝试向在Spring Boot应用程序中遇到404(或其他)错误的用户显示Vaadin呈现的页面。

特别是,当URL与任何UI都不匹配时,我想要提供此页面。我有多个UI都映射到他们自己的路径,如果用户访问不属于UI的路径,则应该提供404页面。

我尝试了一种非常简单的方法,我定义了一个映射到" / error"的用户界面:

@Widgetset("server.AeriWidgetset")
@SpringUI(path = "/error")
public class ErrorUI extends UI {

    @Override
    protected void init(VaadinRequest request) {
        Label lblError = new LabelBuilder().withValue("This is an error").build();

        VerticalLayout layout = new MVerticalLayout().with(lblError).withMargin(true);
        setContent(layout);
    }
}

当触发404错误时,会调用 init()方法,但我只在浏览器中获得以下输出,

{"v-uiId":4,"uidl":"{\"Vaadin-Security-Key\":\"118c54bc-5ce8-421a-9103-d71e11bf40d9\",\"syncId\": 0, \"resynchronize\": true, \"clientId\": 0, \"changes\" : [[\"change\",{\"pid\":\"39\"},[\"0\",{\"id\":\"39\",\"location\":\"http:\\/\\/localhost:9002\\/asd\"}]]], \"state\":{\"39\":{\"localeServiceState\":{\"localeData\":[{\"name\":\"de_DE\",\"monthNames\":[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],\"shortMonthNames\":[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],\"shortDayNames\":[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],\"dayNames\":[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],\"firstDayOfWeek\":1,\"dateFormat\":\"dd.MM.yy\",\"twelveHourClock\":false,\"hourMinuteDelimiter\":\":\",\"am\":null,\"pm\":null}]},\"theme\":\"aeri\",\"height\":\"100.0%\",\"width\":\"100.0%\",\"registeredEventListeners\":[\"clientConnectorDetach\"]},\"40\":{\"spacing\":true,\"childData\":{\"41\":{\"alignmentBitmask\":5,\"expandRatio\":0}},\"marginsBitmask\":15,\"width\":\"100.0%\"},\"41\":{\"text\":\"This is an error\",\"width\":\"100.0%\"}}, \"types\":{\"39\":\"0\",\"40\":\"1\",\"41\":\"2\"}, \"hierarchy\":{\"39\":[\"40\"],\"40\":[\"41\"]}, \"rpc\" : [], \"meta\" : {\"repaintAll\":true}, \"resources\" : {}, \"typeMappings\" : { \"com.vaadin.ui.UI\" : 3 , \"com.vaadin.server.AbstractClientConnector\" : 4 , \"com.vaadin.ui.AbstractSingleComponentContainer\" : 5 , \"com.vaadin.ui.AbstractComponent\" : 6 , \"com.vaadin.ui.AbstractLayout\" : 7 , \"org.vaadin.viritin.layouts.MVerticalLayout\" : 1 , \"com.vaadin.ui.VerticalLayout\" : 8 , \"com.ctrlflow.aer.server.ui.ErrorUI\" : 0 , \"com.vaadin.ui.Label\" : 2 , \"com.vaadin.ui.AbstractComponentContainer\" : 9 , \"com.vaadin.ui.AbstractOrderedLayout\" : 10 }, \"typeInheritanceMap\" : { \"3\" : 5 , \"5\" : 6 , \"6\" : 4 , \"7\" : 9 , \"1\" : 8 , \"8\" : 10 , \"0\" : 3 , \"2\" : 6 , \"9\" : 6 , \"10\" : 7 }, \"timings\":[1448, 2]}"}

当我直接进入错误页面时,它渲染得很好。

如何使用Vaadin呈现404或其他错误页面?

1 个答案:

答案 0 :(得分:0)

您可以使用导航器执行此操作。

类似的东西:

let ccVC : CategoriesCollectionViewController  =  UIStoryboard(name:"CandidateProfile",bundle:nil).instantiateViewControllerWithIdentifier("categoriesController") as! CategoriesCollectionViewController;
addChildViewController(ccVC)
ccvc.collectionView.delegate = self

要获得完整的解决方案,请查看quicktickets demo - (github