UriFragmentUtility вызывает исключение сервлета - PullRequest
0 голосов
/ 24 января 2012

Поскольку я следовал этому vaadin: https://vaadin.com/book/-/page/advanced.urifu.html учебник о том, как правильно использовать UriFragmentUtility, я закончил тем, что создал объект, и после попытки добавить этот компонент в мое главное окно, он терпит неудачу со следующимисключение:

SEVERE: Servlet.service() for servlet [Dugsi_Manager Vaadin Application Servlet] in context with path [/Dugsi_Manager] threw exception [java.lang.UnsupportedOperationException] with root cause
java.lang.UnsupportedOperationException
    com.vaadin.ui.CustomComponent.addComponent(CustomComponent.java:218)
    com.vaadin.ui.Panel.addComponent(Panel.java:301)
    com.vaadin.ui.Window.addComponent(Window.java:281)
    org.bixin.dugsi.web.DugsiManagerApplication.init(DugsiManagerApplication.java:44)
    com.vaadin.Application.start(Application.java:554)
    com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication(AbstractApplicationServlet.java:1213)
    com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:484)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:359)
    org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:275)
    org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
    org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
    org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:344)
    org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:272)
    org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

Вот как я добавил объект в мой основной класс приложения:

//Thread Local to create instances of our application
private static ThreadLocal<DugsiManagerApplication> threadLocal = new ThreadLocal<DugsiManagerApplication>();
@Override
public void init() {
    setInstance(this); // immediate access to the app
    //Window homeWindow = createNewWindow();
    Subject currentUser = SecurityUtils.getSubject();
    // Create the URI fragment utility
    Window window = createLoginWindow();    

    setMainWindow(window);
    final UriFragmentUtility urifu = new UriFragmentUtility();
    window.addComponent(urifu);

}

В учебном пособии говорится о первичной части URI (адрес + путь + необязательный запрос).параметры), мой путь установлен как / Dugsi_Manager (web.xml), если он не запускается после добавления объекта urifu как https://localhost:8080/Dugsi_Manger#login?

Редактировать: Добавлено объявление окна LoginWindow:

public Window createLoginWindow(){
     final Window loginWindow = new LoginWindow();

    //remove the window if closed to avoid memory leaks
    loginWindow.addListener(new CloseListener() {
        @Override
        public void windowClose(CloseEvent e) {
            if (getMainWindow() != loginWindow) {
                DugsiManagerApplication.this.removeWindow(loginWindow);
            }
        }
    });
    return loginWindow;
}

\ ** Кажется, объект UriFragmentUtility можно добавить в стандартное окно Vaadin, но он не работает с окном, созданным с помощью моей функции createLoginWindow?я не могу понять, почему?

1 Ответ

0 голосов
/ 24 января 2012

Исключение выдается методом addComponent CustomComponent. Так что, я думаю, CustomComponent - это содержимое окна. Чтобы решить эту проблему, добавьте вашу утилиту UriFragmentUtility непосредственно в макет, который является корнем композиции CustomComponent, вместо

window.addComponent(urifu);
...