【问题标题】:Spring Boot and PrettyFaces: PrettyFaces Not LoadingSpring Boot 和 PrettyFaces:PrettyFaces 未加载
【发布时间】:2015-02-14 04:24:07
【问题描述】:

总结: 当我打开我的 Spring Boot 应用程序时。 (在嵌入式 Tomcat 8 服务器上运行)我从未收到:

INFO  [org.ocpsoft.rewrite.servlet.RewriteFilter] RewriteFilter starting up...
...
INFO  [org.ocpsoft.rewrite.servlet.RewriteFilter] Loaded [] org.ocpsoft.rewrite.config.ConfigurationProvider [org.ocpsoft.rewrite.prettyfaces.PrettyFacesRewriteConfigurationProvider<1>]
INFO  [org.ocpsoft.rewrite.servlet.RewriteFilter] RewriteFilter initialized.

记录通知。由于某种原因 PrettyFaces 没有启动,我不知道为什么。

技术:Spring Boot 1.2.0.RELEASE、Java 8、Maven 用于依赖管理。嵌入式 Tomcat 8.0.15 服务器。

尽可能关注 Java 配置。以前我尝试使用 Rewrite,但它给了我同样数量的粗鲁。感觉好像我遗漏了一些明显的东西。

这是我当前代码库的链接。 (它很小,只是在为一个新项目打基础,还没有什么大的实现。)

https://github.com/MeisterGit/FoundationServer

Maven 依赖:

<dependency>
    <groupId>com.ocpsoft</groupId>
    <artifactId>prettyfaces-jsf2</artifactId>
    <version>3.3.3</version>
</dependency>`

尝试了其他 Maven 依赖项:

<!-- PrettyFaces -->
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-servlet</artifactId>
    <version>2.0.12.Final</version>
</dependency>
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-config-prettyfaces</artifactId>
    <version>2.0.12.Final</version>
</dependency>

两个版本产生相同的结果。没有启动消息。

我试图将 XML 保持在最低限度。我有 faces-config 设置:

<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
        version="2.2">

    <!-- Allow Spring Beans to be accessible to JSF. -->
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>
</faces-config>`

而我的控制器顶部是:

@Controller
@URLMapping(id = UserController.INDEX,
        pattern = "/",
        viewId = "/content/index.xhtml") // Home page.`

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="foundation-server"
    version="3.1">

<!-- PrettyFaces: Specify which package to scan for @UrlMapping annotations --> 
<context-param>
   <param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name>
   <param-value>foundation</param-value>
</context-param>

<!--  No Pretty Filter required, servlet 3.0+ automatically registers the filter. -->
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

对我做错了什么有帮助吗?服务器打开,我可以点击http://localhost:8080/content/index.xhtml 就好了,JSF 模板加载。 Spring Bean 支持它。 . .但是没有 URL 映射起作用。如果我点击http://localhost:8080/,我只会收到错误消息。

【问题讨论】:

  • 您应该尝试在您的 web.xml 中手动注册所需的过滤器。看起来自动注册由于某种原因无法正常工作。不确定这是否与 Spring Boot 有关?
  • 请参阅下面安迪的回答。显然,当使用带有嵌入式容器的 Spring Boot 时,web.xmlweb-fragment.xml 将被忽略。
  • 你是如何设法解决这个问题的。 Spring boot 无法在我的托管 bean 中检测到 @URLMapping

标签: spring-boot jsf-2.2 prettyfaces


【解决方案1】:

当您使用带有嵌入式容器的 Spring Boot 时,web.xmlweb-fragment.xml 将被忽略。您需要在应用程序的 Java 配置中注册 PrettyFaces 过滤器:

@Bean
public FilterRegistrationBean prettyFilter() {
    FilterRegistrationBean prettyFilter = new FilterRegistrationBean(new PrettyFilter());
    prettyFilter.setDispatcherTypes(DispatcherType.FORWARD, DispatcherType.REQUEST,
            DispatcherType.ASYNC, DispatcherType.ERROR);
    prettyFilter.addUrlPatterns("/*");
    return prettyFilter;
}

如果 PrettyFaces 在类路径中,则可以改进 Spring Boot 以自动为您配置此过滤器。如果您想看到这样的增强,请open an issue

【讨论】:

  • 嘿!非常感谢。我不知道那些文件被忽略了。将您建议的 bean 添加到我的配置中就像一个魅力。现在我只需要修复 spring 安全过滤器配置——因为它也在 web.xml 文件中定义。
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多