【问题标题】:can @RequestMapping replace faces-config.xml when using jsf with spring? [duplicate]将jsf与spring一起使用时@RequestMapping可以替换faces-config.xml吗? [复制]
【发布时间】:2017-08-17 07:50:58
【问题描述】:

我想在不使用任何 xml 配置来配置我使用的 spring 的情况下将 jsf 与 spring 集成:

public class SpringWebAppInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
    appContext.register(ApplicationContextConfig.class);

    ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
            "SpringDispatcher", new DispatcherServlet(appContext));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/");

}

以及 Spring hibernate 和 jsf 的 ApplicationContextConfig :

public class ApplicationContextConfig {
@Bean(name = "viewResolver")
public InternalResourceViewResolver getViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsf");
    return viewResolver;
}

@Bean(name = "dataSource")
public DataSource getDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/usersdb");
    dataSource.setUsername("root");
    dataSource.setPassword("   ");

    return dataSource;
}


private Properties getHibernateProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.show_sql", "true");
    properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
    return properties;
}


@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) {
    LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
    sessionBuilder.addProperties(getHibernateProperties());
    sessionBuilder.addAnnotatedClasses(User.class, BookBean.class);
    return sessionBuilder.buildSessionFactory();
}




@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(
        SessionFactory sessionFactory) {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager(
            sessionFactory);

    return transactionManager;
}

但是现在我需要配置 faces-config.xml ,想法是创建一个控制器并使用 @RequestMapping 注释映射我的页面,但似乎我遗漏了一些东西。 那么该解决方案可以替换 faces-config.xml 还是该文件有任何 java 配置?

【问题讨论】:

    标签: java spring jsf jakarta-ee


    【解决方案1】:

    您还需要配置 JSF 的 FAces Servlet,如下所示:

    ServletRegistration.Dynamic facesServlet = servletContext.addServlet("facesServlet", new FacesServlet());
    facesServlet.setLoadOnStartup(1);
    facesServlet.addMapping("*.xhtml");
    

    同样,如果你想使用 JSF,你必须使用 faces-config.xml。你可以使用注解驱动的Managed beans和JSF的隐式导航,但是Spring中没有requestmapping这样的东西。

    如果您想使用 Spring MVC 提供的 @RequestMapping,并且除非您有充分的理由使用 JSF,否则我建议您查看 Spring MVC,尽管它不是基于组件的框架。

    【讨论】:

    • 使用注释驱动的托管 bean 和 JSF 的隐式导航我必须使用 faces-config.xml
    • 是的,如果您决定继续使用 JSF,仍然需要 faces-config 文件。这是基本的配置文件。您可以使用隐式导航和 @ManagedBean 注释,但仍然有一些基本配置位于 faces-config 文件中。
    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2011-11-30
    • 1970-01-01
    • 2010-11-07
    • 2019-12-21
    相关资源
    最近更新 更多