2012-09-07 13 views
7

Java EE mimarisine dayanan uygulamalar geliştirmede Bu benim ilk deneyim ve benİlkbahar 3.1 uygulamasında JSF yönetilen bir fasulye nasıl bildirilir?

  • JSF 2.0
  • Bahar kullanıyorum 3.1
  • JPA 2,0

Ne hakkında lütfen sormak istiyorum biraz karıştığım bir konu. JSF'nin yönetilen fasulyemi bildirmek istiyorum ancak bu kısıtlama ile başa çıkmak için birçok çözüm var:

  1. Mandallanmış fasulyeyi faces-config.xml dosyasında belirtin.
  2. Denetleyicimin @ManagedBean ek açıklaması ile geçersiz kılın.
  3. Denetleyicimi @Controller ek açıklamasıyla geçersiz kıl.

Sorum şu: Bu üç çözüm arasındaki fark nedir?! ve ApplicationConfig.java veya/ve web.xml'de ne gibi değişiklikler yapmalıyım? Ve Spring ile ilgili olarak, web.xml sayfama bir çeşit dinleyici yerleştirmeliyim?

Gerçekten birçok öğretici ve örnek okumaya çalıştım ama her defasında kendimi engelledim!

cevap

23

İlkbahar ve JSF'yi bütünleştirirken, iki teknolojide de yeni bir başlangıç ​​yapamazsınız çünkü birlikte iyi oynamıyorlar. Size ilk ve en iyi tavsiyem JSF ve İlkbahar ile ilgili birkaç kitap almak ve bunları entegre etmeden önce her ikisini de ayrı ayrı anlamak.

Bununla birlikte, JSF, MVC'ye vurgu yapan bileşen tabanlı bir web çerçevesidir. Bahar, web uygulamalarına özel olmayan bir Bağımlılık Enjeksiyonu ve Kontrol çerçevesinin tersine çevrilmesidir. Anlamadığınız ise

bu üç terimlerdir: Kontrol

  • Bileşen tabanlı web çerçeve

  • Bağımlılık Enjeksiyon

  • İnversiyon

Sonra benim öneri, yaptığınız şeyi durdurmanızdır. ve hemen okumaya başlar.

Bu iki şeyin bütünleştirilmesindeki temel sorun, ele alınması gereken iki çerçeve arasındaki sorumluluklarda bir miktar çakışma olmasıdır. Bağımsız bir çerçeve olarak JSF, ayrı bir DI çerçevesine ihtiyaç duymadan kendi yönetilen çekirdeklerinin kapsamını korur. Ancak Bahar'ı sunarken, doğal olarak çatışmalar olacaktır. Spring, JSF'den ayrı olarak kendi Fasulyelerini yönetir, dolayısıyla bu ManagedBeans'e başvurmak ve iş nesneleri veya DAO'ların kullanıma uygun şekilde enjekte edilmesi için JSF ManagedBeans'in Spring Controllers olması gerekir.

Bir JSF ManagedBean öğesini @Controller ek açıklamayla bildirebilirsiniz. İlkbahar 3, bir JSF tarafından yönetilen bir fasülye olduğunu ve ManagedBean'a göre isminin beyan edildiği adın ne olacağını bilecek kadar akıllıdır.

@Controller 
@Scope("session") 
@ManagedBean(name="testBean") 

Şimdi bu şekilde ele alındığının, sonraki sorun JSF uygulaması ile geldiğini sinir bozucu EL Çözümleyici olduğunu. EL Çözümleyicisi temel olarak sadece XHTML/JSF sayfanızda karşılaşılan EL ifadelerini çözer. testBean'a başvururken, bu adla JSF tarafından yönetilen bir fasülyeye atıfta bulunduğu için bu adı doğru bir şekilde çözemeyecektir ve Spring Controller'ı gereksinim duyduğunuz tüm Spring enjekte bağımlılıkları ile birlikte bulamayacaktır.

Spring 3, JSF uygulamanızın paketiyle birlikte gelen yerine kullanmak üzere size özel bir EL Çözücü sağlayarak bu sorunu çözmektedir. Sen faces-config.xml

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

Şimdi nihayet kullanılabilmesi için ilan edebilir:

benim web.xml''deki dinleyici çeşit koymak gerekir?!

ki başka herhangi Bahar kontrollü Servlet gerek kalmadan veya daha sonra hiçbir Eğer web.xml ek bir şey gerekmez Bahar Güvenlik entegrasyonu için gerek kalmadan JSF + Bahar entegre ediyorsanız. Sadece FacesServlet ve onun bağlam parametrelerini ve durumunuz için gerekli olabilecek diğer üçüncü taraf bileşen kitaplığı sunucularını bildirmeniz gerekir.

+2

Harika bir açıklama. Teşekkürler! – Kris

İlgili konular