代码之家  ›  专栏  ›  技术社区  ›  Tigerware

瓦丁:如何使所有片段URL不区分大小写

  •  1
  • Tigerware  · 技术社区  · 7 年前

    navigator.addView("myView", CustomClass.class);
    

    这是区分大小写的。所以这是可行的:

    http://domain/#!myView
    

    这不起作用:

    http://domain/#!myview
    

    有没有办法配置导航器,使其以忽略案例的方式工作?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Oleg    7 年前

    你需要创建一个新的 ViewProvider

    import com.vaadin.navigator.View;
    import com.vaadin.navigator.ViewProvider;
    
    public class CaseInsensitiveClassBasedViewProvider implements ViewProvider {
    
        private static final long serialVersionUID = 1L;
    
        private String viewName;
        private final Class<? extends View> viewClass;
    
        public CaseInsensitiveClassBasedViewProvider(String viewName, Class<? extends View> viewClass) {
            if (null == viewName || null == viewClass) {
                throw new IllegalArgumentException(
                        "View name and class should not be null");
            }
    
            this.viewName = viewName;
            this.viewClass = viewClass;
        }
    
        @Override
        public String getViewName(String viewAndParameters) {
            if (null == viewAndParameters) {
                return null;
            }
    
            String viewAndParametersU = viewAndParameters.toUpperCase();
            String viewNameU = viewName.toUpperCase();
    
            if (viewAndParametersU.equals(viewNameU) || viewAndParametersU.startsWith(viewNameU + "/")) {
                return viewName;
            }
            return null;
        }
    
        @Override
        public View getView(String viewName) {
            if (this.viewName.equalsIgnoreCase(viewName)) {
                try {
                    View view = viewClass.newInstance();
                    return view;
                } catch (InstantiationException e) {
                    throw new RuntimeException(e);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                }
            }
            return null;
        }
    }
    

    然后,而不是添加 addView

    navigator.addProvider(new CaseInsensitiveClassBasedViewProvider("myView", CustomClass.class));