没有使用SpringBoot'管理'的豆子

时间:2017-09-20 08:15:23

标签: spring jsf spring-boot

我在Spring Boot中使用JSF。 我的问题是,如果我使用@javax.faces.bean.ManagedBean注释我会收到

  

javax.el.PropertyNotFoundException:目标无法访问,标识符   [numberTest]解析为null

我解决了问题,在托管bean上也放了@Component注释。 另一种方法是将Java类放在WEB-INF中。

我的问题是:上述两种方式对我来说都很糟糕,我认为这会引起麻烦。这个问题的解决方案是什么?

我搜索了很多并尝试了所有解决方案。

(另外一个事实,使用@javax.annotation.ManagedBean核心JSP函数工作(我没有收到错误),但例如EL dos not。)

这是代码,我收到了PropertyNotFoundException:

Configuration.java

import javax.faces.webapp.FacesServlet;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableWebMvc
@Configuration
@EnableJpaRepositories(basePackageClasses = {})
@ComponentScan(basePackageClasses = { CLASSES_ARE_HERE })
public class Configuration {

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

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        FacesServlet servlet = new FacesServlet();            
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "*.xhtml");
        return servletRegistrationBean;
    }

}

托管bean:

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean
@ApplicationScoped
public class NumberTest {


    private int theNumber=0;


    public NumberTest() {

    }

    public void addOne() {
        theNumber++;
    }

    public void addN(int n) {
        theNumber+=n;
    }

    public int getTheNumber() {
        return theNumber;
    }

    public void setTheNumber(int theNumber) {
        this.theNumber = theNumber;
    }
}

的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>*.xhtml</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>
    <!-- Time in seconds that facelets should be checked for changes since last 
        request. A value of -1 disables refresh checking. -->
    <context-param>
        <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
        <param-value>1</param-value>
    </context-param>

    <!-- Set the project stage to "Development", "UnitTest", "SystemTest", or 
        "Production". -->
    <!-- An optional parameter that makes troubleshooting errors much easier. -->
    <!-- You should remove this context parameter before deploying to production! -->
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
</web-app>

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
        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>
</faces-config>

.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>Szám</h1>
        <h3>#{numberTest.theNumber}</h3>
        <h:form>
            <br></br>
            <h:commandButton action="#{numberTest.addOne()}" value="Add one"></h:commandButton>         
        </h:form>
        <h:form>
            <br></br>
            <h:inputText binding="#{input1}" />
            <h:commandButton value="Add N" action="#{numberTest.addN(input1.value)}" />          
        </h:form>
    </h:body>
</html>
</f:view>

0 个答案:

没有答案