Как установить другой скрин отличный от Login Page при стартовом открытии приложения?

Мне нужно показать не авторизованным пользователям показать свой скрин заместо логин при начальном открытии приложения. Как это сделать куда копать?. Куба 6.10 версия.

Здравствуйте,

Для этого вам нужно расширить класс DefaultApp и зарегистрировать его в web-spring.xml как это описано в документации.

После этого переопределить метод DefaultApp#routeTopLevelWindowId и возвращать там id необходимого экрана.

Даниил

Спасибо огромное!

Добрый день!
Даниил, воспользовалась вашим описанием для отображения главного экрана при входе определённых пользователей.
Но при доступе в систему получаю ошибку

com.haulmont.cuba.gui.NoSuchScreenException: Screen ‘ExtNewUserMainScreen’ is not defined. Make sure the screen controller is located inside or below the base package specified in gui:screens element of web-spring.xml

Попробовала этот экран добавить в web-screens.xml ошибка осталась.

Подскажите, пожалуйста, что ещё можно сделать?

Здравствуйте, Евгения

Не могли бы вы уточнить, какую версию CUBA вы используете?

Версия платформы 7.1.3
Студия 12.3-191

Всё должно быть достаточно просто при использовании CUBA Studio:

  1. После создания расширенного экрана ExtMainScreen необходимо убрать из web-app.properties строчку с изменением значения свойства cuba.web.mainScreenId, чтобы новый экран не использовался как экран по умолчанию, либо вернуть старое значение, если уже используется расширенный главный экран.
  2. Расширям класс DefaultApp и его метод routeTopLevelWindowId():
@SuppressWarnings("ConstantConditions")
@Override
protected String routeTopLevelWindowId() {
    if (connection.isAuthenticated()) {
        User loggedUser = connection.getSession()
                .getUser();

        // Check for condition and route custom screen if needed
        return "demo".equals(loggedUser.getLogin())
                ? "extMainScreen"
                : webConfig.getMainScreenId();
    } else {
        // ...
    }
}
  1. Регистрируем новую реализацию в web-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:gui="http://schemas.haulmont.com/cuba/spring/cuba-gui.xsd">

    <!-- Annotation-based beans -->
    <context:component-scan base-package="com.company.sample"/>
    
    <gui:screens base-packages="com.company.sample.web"/>

    <bean name="cuba_App" class="com.company.sample.web.MyApp"
          scope="vaadin"/>
</beans>

Результат:

image

Так же вы можете ознакомиться с приложенным проектом:

ext-main-screen.zip (77.2 КБ)

Даниил

2 симпатии

Даниил, спасибо за подробный разбор.
Из web-app.properties я убрала строку с параметром cuba.web.mainScreenId
Остальные настройки у меня были идентичны.
К сожалению, я получаю ошибку :frowning: , но теперь уже немного другого содержания

java.lang.RuntimeException: Unable to create instance of screen class class com.company.itam.web.screens.ExtSimpleUserMainScreen

Не могли бы вы прислать полный стектрейс ошибки?

Доброе утро!
Конечно.

10:00:03.088 INFO c.h.cuba.gui.config.WindowConfig - WindowConfig initialized in 423 ms
10:00:16.306 INFO c.h.c.s.a.AuthenticationManagerBean - Logged in: 34f38929-5797-3a13-9262-f31703bd7163 [a.kotova]
10:00:16.409 WARN c.h.cuba.web.app.login.LoginScreen - Unable to login
java.lang.RuntimeException: Unable to create instance of screen class class com.company.itam.web.screens.ExtSimpleUserMainScreen
at com.haulmont.cuba.web.sys.WebScreens.createController(WebScreens.java:958) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.sys.WebScreens.createScreen(WebScreens.java:199) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.sys.WebScreens.create(WebScreens.java:175) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.gui.Screens.create(Screens.java:70) ~[cuba-gui-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.App.createTopLevelWindow(App.java:300) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.DefaultApp.initializeUi(DefaultApp.java:243) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.DefaultApp.connectionStateChanged(DefaultApp.java:111) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.security.ConnectionImpl.fireStateChangeListeners(ConnectionImpl.java:228) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.security.ConnectionImpl.login(ConnectionImpl.java:106) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.app.login.LoginScreen.doLogin(LoginScreen.java:340) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.app.login.LoginScreen.doLogin(LoginScreen.java:309) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.app.login.LoginScreen.login(LoginScreen.java:253) ~[cuba-web-7.1.3.jar:7.1.3]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at com.haulmont.cuba.gui.xml.DeclarativeAction.actionPerform(DeclarativeAction.java:101) ~[cuba-gui-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.gui.components.WebFrameActionsHolder.handleAction(WebFrameActionsHolder.java:157) ~[cuba-web-7.1.3.jar:7.1.3]
at com.vaadin.event.ActionManager.handleAction(ActionManager.java:251) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.event.ActionManager.handleActions(ActionManager.java:234) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.haulmont.cuba.web.widgets.CubaOrderedActionsLayout.changeVariables(CubaOrderedActionsLayout.java:88) ~[cuba-web-widgets-7.1.3.jar:na]
at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:611) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:457) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:400) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.6.4-23-cuba.jar:8.6.4-23-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.1.3.jar:7.1.3]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.1.3.jar:7.1.3]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.19]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.19]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.19]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) ~[cuba-web-7.1.3.jar:7.1.3]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[catalina.jar:9.0.19]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[catalina.jar:9.0.19]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.19]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) ~[catalina.jar:9.0.19]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.19]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.19]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-coyote.jar:9.0.19]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-coyote.jar:9.0.19]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836) ~[tomcat-coyote.jar:9.0.19]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747) ~[tomcat-coyote.jar:9.0.19]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.19]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.19]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

Даниил, спасибо за помощь.
Вопрос снимаю, нашла ошибку в своём коде в классе экрана.