Рубрики
Без рубрики

Пример интеграции JSF 2 + Spring 3

– JSF 2+ Пример интеграции весны 3

В этом уроке мы покажем вам, как интегрировать JSF 2.0 с Spring 3 с помощью:

  1. JSF XML-файл faces-config.xml
  2. Весенние аннотации
  3. Стандартная инъекция JSR-330

Используемые инструменты и технологии:

  1. СПС 2.1.13
  2. Пружина 3.1.2. ВЫПУСК
  3. Мавен 3
  4. Затмение 4.2
  5. Кот 6 или 7

1. Структура каталогов

Стандартный проект Maven для демонстрации.

2. Зависимости проекта

Объявляет зависимости JSF 2, Spring 3, JSR-330 inject и Tomcat.



	4.0.0
	com.mkyong.common
	JavaServerFaces
	war
	1.0-SNAPSHOT
	JavaServerFaces Maven Webapp
	http://maven.apache.org

	

		
		
			org.springframework
			spring-core
			3.1.2.RELEASE
		

		
			org.springframework
			spring-web
			3.1.2.RELEASE
		

		
		
			javax.inject
			javax.inject
			1
		
		
		
		
			com.sun.faces
			jsf-api
			2.1.13
		
		
			com.sun.faces
			jsf-impl
			2.1.13
		

		
			javax.servlet
			jstl
			1.2
		

		
			javax.servlet
			servlet-api
			2.5
		

		
			javax.servlet.jsp
			jsp-api
			2.1
		

		
		
			org.glassfish.web
			el-impl
			2.2
		

		
		
			com.sun.el
			el-ri
			1.0
		

	

	
	JavaServerFaces

	
	   
		org.apache.maven.plugins
		maven-compiler-plugin
		2.3.1
		
			1.6
			1.6
		
	   
	
	

3. Интеграция JSF 2+ Spring

Компонент Spring в контексте Spring Ioc и управляемый компонент JSF в контексте JSF Ioc, как заставить их работать вместе? Решение определено Spring’s SpringBeanFacesELResolver для решения в faces-config.xml . Проверьте это официальное руководство по пружинам .




	
		
    		    org.springframework.web.jsf.el.SpringBeanFacesELResolver
		
  	
 

Смотрите следующие 3 примера внедрения компонента Spring в управляемый компонент JSF.

3.1. Пример схемы XML

Многие разработчики по-прежнему предпочитают использовать XML для управления компонентами. С SpringBeanFacesELResolver , просто использует EL ${USERBO} для внедрения компонента Spring в управляемый компонент JSF.

package com.mkyong.user.bo;
 
public interface UserBo{
 
	public String getMessage();
 
}
package com.mkyong.user.bo.impl;

import com.mkyong.user.bo.UserBo;

public class UserBoImpl implements UserBo{
 
	public String getMessage() {
		
		return "JSF 2 + Spring Integration";
	
	}
 
}
package com.mkyong;

import java.io.Serializable;
import com.mkyong.user.bo.UserBo;

public class UserBean{
 
        //later inject in faces-config.xml
	UserBo userBo;

	public void setUserBo(UserBo userBo) {
		this.userBo = userBo;
	}

	public String printMsgFromSpring() {
		
		return userBo.getMessage();
		
	}
	
}

 
	
	



    
	
		user
		com.mkyong.UserBean
		session
		
			userBo
			#{userBo}
		
	
	

3.2. Весенние аннотации – Автоматическое сканирование

В этом примере используются аннотации Spring. Вводит как обычный компонент с @ManagedBean , @Autowired и @Компонент , он просто работает так, как ожидалось.

package com.mkyong.user.bo.impl;

import org.springframework.stereotype.Service;
import com.mkyong.user.bo.UserBo;

@Service
public class UserBoImpl implements UserBo{
 
	public String getMessage() {
		
		return "JSF 2 + Spring Integration";
	
	}
 
}
package com.mkyong;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.mkyong.user.bo.UserBo;

@Component
@ManagedBean
@SessionScoped
public class UserBean{
 
	@Autowired
	UserBo userBo;

	public void setUserBo(UserBo userBo) {
		this.userBo = userBo;
	}

	public String printMsgFromSpring() {
		return userBo.getMessage();
	}
	
}


	


Смешанное использование аннотаций JSF и Spring работает нормально, но выглядит странно и дублируется – @Компонент и @ManagedBean вместе. На самом деле, вы можете просто использовать один @компонент , см. Следующую новую версию, это чистая весна, и она работает!

package com.mkyong;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.mkyong.user.bo.UserBo;

@Component
@Scope("session")
public class UserBean{
 
	@Autowired
	UserBo userBo;

	public void setUserBo(UserBo userBo) {
		this.userBo = userBo;
	}

	public String printMsgFromSpring() {
		return userBo.getMessage();
	}
	
}

3.3. Аннотация JSR-330

Начиная с Spring 3.0, Spring предлагает поддержку стандарта впрыска JSR-330 . Теперь вы можете использовать @Inject для замены @Автоматически подключенный и @По имени для @компонента . Это рекомендуется для решения, следуйте стандарту JSR-330, сделайте приложение более переносимым для других сред, и оно отлично работает в Spring framework.

package com.mkyong.user.bo.impl;

import javax.inject.Named;
import com.mkyong.user.bo.UserBo;

@Named
public class UserBoImpl implements UserBo{
 
	public String getMessage() {
		
		return "JSF 2 + Spring Integration";
	
	}
 
}
package com.mkyong;

import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import com.mkyong.user.bo.UserBo;

@Named
@Scope("session") //need this, JSR-330 in Spring context is singleton by default
public class UserBean {

	@Inject
	UserBo userBo;

	public void setUserBo(UserBo userBo) {
		this.userBo = userBo;
	}

	public String printMsgFromSpring() {
		return userBo.getMessage();
	}

}


	


4. Демонстрация

Пример в 3.1 , 3.2 и 3.3 делаем именно то, что нужно – вводим userBo в компонент JSF, просто другая реализация. Теперь создайте простую страницу JSF, чтобы показать результат.





 
    
 
    	

JSF 2.0 + Spring Example

#{userBean.printMsgFromSpring()}


 
  JavaServerFaces
 
  
  
	
		org.springframework.web.context.ContextLoaderListener
	
  
  
	
		org.springframework.web.context.request.RequestContextListener
	
  

  
  
    javax.faces.PROJECT_STAGE
    Development
  
 
  
  
    default.jsf
  
 
  
  
    facesServlet
    javax.faces.webapp.FacesServlet
    1
  
  
    facesServlet
    *.jsf
  
  
    facesServlet
    *.xhtml
  
 

Готово, см. Вывод: http://localhost:8080/JavaServerFaces/default.jsf

Скачать Исходный Код

Рекомендации

  1. Ссылка на пружину – Пружинный решатель лицевых поверхностей
  2. Весна как сделать инъекцию зависимостей в прослушивателе сеанса
  3. Весна 3 и JSR-330 @Вводят и @Именованный пример

Оригинал: “https://mkyong.com/jsf2/jsf-2-0-spring-integration-example/”