当前位置: 首页 > 知识库问答 >
问题:

使用带有JSF bean的Spring Boot

施昊然
2023-03-14

我正在尝试让Spring Boot与JSF一起工作。FacesServlet被初始化,网站用PrimeFaces正确呈现。但是在我调用JSF或Spring-Bean时,没有显示任何内容。

我知道这个问题被问了很多次,但都没有解决我的问题。经过几个小时的搜索,我还是没有找到工作。我是不是漏掉了什么?

设置:

    null
    null
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

@Bean
public FacesServlet facesServlet() {
    return new FacesServlet();
}

@Bean
public ServletRegistrationBean facesServletRegistration() {
    ServletRegistrationBean registration = new   ServletRegistrationBean(facesServlet(), new String[] { "*.xhtml" });
    registration.setName("FacesServlet");
    registration.setLoadOnStartup(1);
    return registration;
}

@Configuration
static class ConfigureJSFContextParameters implements ServletContextInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("com.sun.faces.forceLoadConfiguration", "true");
        servletContext.setInitParameter("javax.faces.DEFAULT_SUFFIX", ".xhtml");
        servletContext.setInitParameter("encoding", "UTF-8");
    }
}

@Bean
public ServletListenerRegistrationBean<ConfigureListener> jsfConfigureListener() {
    return new ServletListenerRegistrationBean<ConfigureListener>(new ConfigureListener());
}
}

jsfbean.java

@ManagedBean
public class JsfBean {

private String welcomeMessage = "Populated by JSF created bean";

public String getWelcomeMessage() {
    return welcomeMessage;
}
}

SpringBean.java

@Component
public class SpringBean {

private String welcomeMessage = "Populated by spring created bean";

public String getWelcomeMessage() {
    return welcomeMessage;
}
}

index.xhtml

<!DOCTYPE html>
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui" encoding="UTF-8">

<html>
    <h:head>
    </h:head>

    <h:body>
        <h1>Rechnung</h1>
        <h3>#{springBean.welcomeMessage}</h3>
        <h3>#{jsfBean.welcomeMessage}</h3>
    </h:body>
</html>
</f:view>

输出

<h1>Rechnung</h1>
<h3></h3>
<h3></h3>

共有1个答案

范安歌
2023-03-14

我真的让它起作用了。在链接的教程中,我忽略了必须将faces-config.xml放在resources-文件夹src/main/resources/meta-inf/中,而不是src/main/webapp/meta-inf/

这导致了从未使用el-resolver的问题,这也解释了为什么#{springbean.welcomeMessage}没有显示任何内容。

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/web-facesconfig_2_2.xsd"
          version="2.2">

<application>
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application>

<lifecycle>
    <phase-listener>org.springframework.web.jsf.DelegatingPhaseListenerMulticaster</phase-listener>
</lifecycle>
 类似资料:
  • 如何使会话中的特定bean无效? 我有这个示例代码。我使用外部上下文进行测试。失效会话();但它会销毁应用程序中会话中的所有bean,因为它会销毁整个会话。 但是,使用invalidateSession,会话中的所有bean都将被销毁,我只想使一个特定的“托管”bean失效,我如何做到这一点?

  • 我正在使用创建React应用程序,并尝试使用提供的组件。 我遇到的问题似乎涉及导入名为

  • 问题内容: 我需要通过带有SSL的spring-ldap与LDAP服务器进行通信,并且另一端拥有一个自签名证书。 有什么好心请给我一些指导来进行设置吗? 问题答案: 查看Spring LDAP文档以通过HTTP(S)连接到LDAP服务器: 就自签名证书而言,您可以将证书链导入信任库并设置以下VM参数: 或在运行时覆盖信任库,例如: 请记住,这两个选项都将覆盖默认的JVM信任库。因此,如果您使用不同

  • 我正在做一个简单的天气应用程序,我有一个问题,通过AsyncTask读取变量。我是andorid编程的初学者,所以我要求理解。因此,我想将变量“latitude”和“longitude”从place picker中选择到asynctask.execute(“latitude”,“longitude”)中,并刷新屏幕以显示新位置的天气。但我注意到,当我在代码中不是通过变量(例如asynctask.e

  • TLDR;JDBI 注释使用自动生成的类型生成 ,因为生成的类型是包私有的,默认情况下无法使用反射进行访问。 JDBI是不灵活的还是有通过AutoValue的解决方法?(以下是完整的问题) 快速背景 我正在尝试使用JDBI 注释,其类型的源代码是使用AutoValue生成的。 问题是生成的代码看起来像: 请注意,类是包私有的! 现在,如果我尝试使用< code>@BindBean,例如: 因为是包

  • 我有一个字符类型的@XMLElement,但当它被封送时,它似乎被放入一个二进制字符串中,例如。。。 除了将它们转换为字符串之外,还有没有一种方法可以输出文本char而不是表示?