Страница JSF xhtml не найдена

Я пытался следить за различными статьями по настройке моего первого приложения JSF и не могу найти свою первую страницу xhtml. Я все время получаю сообщение об ошибке «Это приложение не имеет явного сопоставления для / error, поэтому вы видите это как запасной вариант» в браузере.

В браузере я набираю http: // локальный: 8080 / modelSimulation.xhtml, чтобы получить эту ошибку, и в консоли вижу: ...: ПОЛУЧИТЬ "/modelSimulation.xhtml", параметры = {} ...: Нет сопоставления для GET /modelSimulation.xhtml

В мое приложение весенней загрузки добавлены различные вещи, необходимые для установки JSF с весенней загрузкой, но мне явно не хватает чего-то, чтобы иметь возможность просматривать мою страницу modelSimulation.xhtml. Что мне не хватает? Спасибо!

Я также попробовал http: // локальный: 8080, но тоже не получил соответствующей ошибки сопоставления.


src / main / webapp / WEB-INF / modelSimulation.xhtml:

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml"
      xmlns:h = "http://xmlns.jcp.org/jsf/html"
      xmlns:ui = "http://xmlns.jcp.org/jsf/facelets" xmlns:p = "http://primefaces.org/ui">
<ui:composition template = "layout.xhtml">
    <ui:define name = "content">
        <h:form id = "mainForm">
            <p:panel header = "Details">
                <h:panelGrid columns = "1">
                    <p:outputLabel for = "symbol" value = "Symbol: " />
                    <p:inputText id = "symbol" value = "#{tradingModelSimulationController.symbol}" />
                    <p:outputLabel for = "ranking" value = "ranking: " />
                    <p:inputNumber id = "ranking" value = "#{tradingModelSimulationController.ranking}" />
                    <h:commandButton value = "apply" action = "#{tradingModelSimulationController.apply}" />
                </h:panelGrid>
            </p:panel>
        </h:form>
    </ui:define>
</ui:composition>
</html>

src / main / webapp / WEB-INF / web.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<web-app xmlns = "http://xmlns.jcp.org/xml/ns/javaee" version = "3.1">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
</web-app>

Я добавил 2 необходимых бина в SpringBootApplication класс:

@Bean
public ServletRegistrationBean servletRegistrationBean() {
    FacesServlet servlet = new FacesServlet();
    return new ServletRegistrationBean(servlet, "*.jsf");
}
@Bean
public FilterRegistrationBean rewriteFilter() {
    FilterRegistrationBean rwFilter = new FilterRegistrationBean(new RewriteFilter());
    rwFilter.setDispatcherTypes(EnumSet.of(DispatcherType.FORWARD, DispatcherType.REQUEST,
            DispatcherType.ASYNC, DispatcherType.ERROR));
    rwFilter.addUrlPatterns("/*");
    return rwFilter;
}

Вот бин поддержки (Я не понимаю @Join ...)

@Scope(value = "session")
@Component(value = "tradingModelSimulationController")
@ELBeanName(value = "tradingModelSimulationController")
@Join(path = "/modelSimulation", to = "/modelSimulation.jsf")
public class TradingModelSimulationController {

    ModelSimulation modelSimulation = new ModelSimulation();

    String symbol;
    int ranking;

    public void apply() {

        System.out.println("Applied: " + modelSimulation.toString());

        RequestContext.getCurrentInstance()
            .execute("handleMsg('applied!');");
    }

    public ModelSimulation getModelSimulation() {
        return modelSimulation;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public int getRanking() {
        return ranking;
    }

    public void setRanking(int ranking) {
        this.ranking = ranking;
    }
}

Почему вы набираете http://localhost:8080/modelSimulation.xhtml, когда у вас есть <url-pattern>*.jsf</url-pattern> И return new ServletRegistrationBean(servlet, "*.jsf"); (что кажется дублированием). Пожалуйста, начните с хорошего учебника SpringBoot / JSF (или используйте соединения, которые afaik, все это сделает за вас)

Kukeltje 06.01.2019 11:53

Я слежу за этим dzone.com/articles/developing-jsf-applications-with-spring-b‌ oot. Я не уверен, по какому URL перейти. Я постараюсь найти другую статью и дать ссылку на то, что я пропустил.

Mike 06.01.2019 16:33

Попробуйте http://localhost:8080/modelSimulation.jsf (или измените расширение в конфигурации на .xhtml. И снова попробуйте joinfaces. Все это упрощает (в настоящее время Spring делает многие вещи сложнее, а не проще).

Kukeltje 06.01.2019 17:51

Я пробовал URL-адрес с исключением jsf - не повезло. Я изменил bean-компонент регистрации сервлета на «* .xhtml», перешел на страницу с расширением .xhtml и получил следующую ошибку: 2019-01-06 12: 57: 38.643 ОШИБКА 13808 --- [nio-8080-exec-2] oaccC [. [. [/]. [facesServlet]: Servlet.service () для сервлета [facesServlet]] в контексте с путем [] сгенерировал исключение [javax / servlet / jsp / jstl / core / Config] с основной причиной java.lang. NoClassDefFoundError: javax / servlet / jsp / jstl / core / Config в JspViewDeclarationLanguage.buildView. (вызывается RenderResponseExecutor.execute (...)

Mike 06.01.2019 19:00

joinfaces звучит интересно. я попробую. Благодарность!

Mike 06.01.2019 19:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
5
524
0

Другие вопросы по теме