2016-09-13 9 views
0

Springブートアプリケーションで404エラー(またはその他のエラー)が発生したユーザーに、Vaadinレンダリングページを表示しようとしています。Springブートで404エラーのVaadin UIを表示するにはどうすればよいですか?

特に、URLがどのUIとも一致しない場合は、このページを提供したいと考えています。複数のUIがすべて自分のパスにマップされているため、ユーザーがUIに属していないパスを訪問すると404ページが表示されます。

私は「/エラー」にマッピングされるUI定義された非常に単純なアプローチを試みた:)(404エラーをトリガする場合、INITを

@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); 
    } 
} 

メソッドが呼び出されるが、私

{"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または他のエラーページをレンダリングするにはどうすればよいですか?

答えて

0

これはナビゲータを使用して行うことができます。完全に動作するソリューションの

@Autowired 
private SpringViewProvider viewProvider; 

@Autowired 
ErrorView errorView; //public class ErrorView extends VerticalLayout implements View 

... 

Navigator nav = new Navigator(UI.getCurrent(),viewContainer); 
nav.addProvider(viewProvider); 
nav.setErrorView(errorView); 

quicktickets demoをチェックアウト - (github

+0

私はこれが私のニーズのすべてのために働くだろうとは思わない:よう

何か。私が理解しているように、ナビゲータはUI固有のものです。私はいくつかのUIをさまざまなパスにマッピングしています。 * example.org/firstUI *と* example.org/secondUI *。フラグメント(UIの背後にあるURL部分)が不明な場合、ソリューションにエラービューが表示されます。私は(また)URLが存在しないUIを参照する場合に興味があります。 * example.org/unknownUI * –

+0

複数のアプリケーションを使用している場合は、実際に複数のアプリケーションを使用しています。私は代わりにビューを使用することを検討することをお勧めします(これはあなたのアプリケーションではサブUIと見ることができます)。 –

関連する問題