Я пытался следить за различными статьями по настройке моего первого приложения 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;
}
}
Я слежу за этим dzone.com/articles/developing-jsf-applications-with-spring-b oot. Я не уверен, по какому URL перейти. Я постараюсь найти другую статью и дать ссылку на то, что я пропустил.
Попробуйте http://localhost:8080/modelSimulation.jsf (или измените расширение в конфигурации на .xhtml. И снова попробуйте joinfaces. Все это упрощает (в настоящее время Spring делает многие вещи сложнее, а не проще).
Я пробовал 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 (...)
joinfaces звучит интересно. я попробую. Благодарность!




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