Я новичок в Spring, но я обнаружил это рабочее решение. Скажите, пожалуйста, если это неприемлемо.
Я делаю Spring applicationContext
в этом компоненте:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class SpringUtils {
public static ApplicationContext ctx;
/**
* Make Spring inject the application context
* and save it on a static variable,
* so that it can be accessed from any point in the application.
*/
@Autowired
private void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
}
Вы можете поместить этот код в основную класс приложения, если вы хотите.
Другие классы могут использовать его следующим образом:
MyBean myBean = (MyBean)SpringUtils.ctx.getBean(MyBean.class);
Таким образом, любой bean-компонент может быть получен любым объектом в приложении (также запутанным с new
) и статическим способом.
JSF 2.0 имеет много новых функций и компонентов, и я не чувствую, что миграция будет болезненной. Только область, которую вы найдете трудной, - это использование сторонних библиотек. Если ваше приложение сильно зависит от таких библиотек, как Richfaces, вы столкнетесь с проблемой. Не все компоненты из Richfaces 3 портированы в Richfaces 4.
Это также может помочь переносу приложения JSF 1.2 в JSF 2.0
Также проверьте это Что нового в JSF 2?
Если вы используете Apache Trinidad, вам также придется обновить его до версии 2.0, чтобы он поддерживал JSF 2.0. Есть дополнительная информация в Valhalla хакера .
Web.xml
Add the jars
1. jsf-api-2.0.jar
2. jsf-impl.2.0.2.jar
Шаг 1: Измените web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Шаг 2: webmvc-config.xml
<!-- Handles requests mapped to the Spring Web Flow system -->
<bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowController">
<property name="flowExecutor" ref="flowExecutor" />
<property name="ajaxHandler">
<bean class="org.springframework.faces.webflow.JsfAjaxHandler" />
</property>
</bean>
Шаг 3: facess-config.xml
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">
Следует отметить, что если кто-то использует JSTL с JSF 1.2, то при обновлении до JSF2 вы должны изменить пространство имен:
http://java.sun.com/jstl / core
to:
javax.faces.VALIDATE_EMPTY_FIELDS
вfalse
, чтобы получить сортировку по правильности. См. Также: stackoverflow.com/questions/6113935/… – Jasper de Vries 9 July 2014 в 14:07