環境:春ブーツJSFの統合
Tomcatの8
春ブーツ1.5
JSF 2.2
はApache MyFacesの
Spring MVCの
コード:
私はSpringBootとJSF 2.2をServlet 3.0環境に統合しています。
コンフィグクラス:
JSFConfig.java - JSFのためのコンフィグ。
@Configuration
@ComponentScan({"com.atul.jsf"})
public class JSFConfig {
@Bean
public ServletRegistrationBean servletRegistrationBean() {
FacesServlet servlet = new FacesServlet();
return new ServletRegistrationBean(servlet, "*.jsf");
}
}
春ブーツメインクラス:
@SpringBootApplication
@Import({ // @formatter:off
JPAConfig.class,
ServiceConfig.class, // this contains UserServiceImpl.java class.
WebConfig.class,
JSFConfig.class,
})
public class SpringbootJpaApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringbootJpaApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootJpaApplication.class);
}
}
マネージドBean:
UserBean.java - JSFのためのマネージドBean
@ManagedBean
@SessionScoped
public class UserBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
@ManagedProperty(value="#{userServiceImpl}")
private UserServiceImpl userServiceImpl;
public void addUser(){
System.out.println("User Gets added "+this.name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserServiceImpl getUserServiceImpl() {
return userServiceImpl;
}
public void setUserServiceImpl(UserServiceImpl userServiceImpl) {
this.userServiceImpl = userServiceImpl;
}
}
のFacelets:
home.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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h2>JSF 2.0 Hello World Example - hello.xhtml</h2>
<h:form>
<h:inputText value="#{userBean.name}"></h:inputText>
<h:commandButton value="Submit" action="#{userBean.addUser}"></h:commandButton>
</h:form>
</h:body>
</html>
面-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>
</faces-config>
問題:
1)Iはhome.xhtml , userBean.addUser
でフォームを送信するときに呼び出されます。 2)userBean.name
には、ユーザーが入力した値が設定されます。 3)ただし、userServiceImpl
はNULLです。 4)これは、SpringとJSFが統合されていないことを意味しますか? I
faces-config.xml
で述べたようにも私もUserBean.javaからすべてのJSF固有のアノテーションを削除しようとした使用のみ下記のような特定のアノテーションを春SpringBeanFacesELResolver
を登録している - 私は、
@Component
@SessionScoped
public class UserBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
@Autowired
private UserServiceImpl userServiceImpl;
}
しかし、私はフォームを送信するときターゲットが到達できません#{userBean)
の到達不能エラーです。つまり、userBean
は春には検出されません。
5)ここに何か不足していますか?
1.サーブレット登録
はJSFサーブレットを登録し、それを設定します。私は春ブーツ
エクストリームバイカーあなたはJSF注釈が仕事を得るための方法を見つけましたか?おそらくスプリングブート2.0? –
いいえ、私はこの回答を書いてからあまりにも多くの掘り出し物はありません。ここであなたの豆を管理しているSpringは、@Componentのようにシングルトンを生成するいくつかのアノテーションを試すことができます。 –