18.02.2013

JSF2: внедрение бина Spring в JSF managed bean.

Когда в JSF managed bean внедряется зависимость в виде другого managed bean - это указывается или с помощью аннотаций, или в файле managed-beans.xml. В JSF 2 рекомендуется использовать аннотации, и мне тоже кажется что это более удобный подход - отпадает небходимость в еще одном XML файле настроек, аннотации это наглядно - все сразу видно при просмотре исходного кода класса.

Вот пример DI в стиле аннотаций, допустим TestData - JSF managed bean, названный  testDataBean внедряется как свойство для testBean:

package test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "testBean")
@SessionScoped
public class TestBean {

@ManagedProperty(value="#{testDataBean}") 
private TestData testData;

public TestData getTestData() {
  return testData;
}

public void setTestData(TestData value) {
  testData = value;
}
}

Но зачастую, нужно внедрить в JSF managed bean не другой JSF managed bean, а бин, который конфигурируется и создается с помощью Spring Framework. Для того чтобы это сработало, нужно указать в /WEB-INF/faces-config.xml:

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

Теперь testDataBean может быть и бином, создаваемым Spring.   



Теги: javaEE jsf

comments powered by Disqus