Обновление JSF 1.2 до 2.x NullPointerException [duplicate]

Я новичок в 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) и статическим способом.

129
задан BalusC 26 December 2010 в 06:35
поделиться

5 ответов

JSF 2.0 имеет много новых функций и компонентов, и я не чувствую, что миграция будет болезненной. Только область, которую вы найдете трудной, - это использование сторонних библиотек. Если ваше приложение сильно зависит от таких библиотек, как Richfaces, вы столкнетесь с проблемой. Не все компоненты из Richfaces 3 портированы в Richfaces 4.

Это также может помочь переносу приложения JSF 1.2 в JSF 2.0

Также проверьте это Что нового в JSF 2?

236
ответ дан Community 21 August 2018 в 14:16
поделиться
  • 1
    @ManagedBean (name = & quot; managedBeanName & quot;) @RequestScoped Это: – Daniel Szalay 29 January 2011 в 11:25
  • 2
    Было бы одинаково, если вы используете Richfaces с JSF 1.x - вы проходите всю «боль», чтобы узнать, как интегрировать сторонние компоненты с JSF. Подход к JSF 2.x не имеет значения. Это «радость». программирования не так ли? :) – ChuongPham 21 April 2011 в 05:56
  • 3
    yup же !!!!!!! – mvg 10 July 2011 в 13:31
  • 4
    отличный пост, мне очень помог. Что-то примечание: при переходе с jsf 1.2 на jsf 2 вы можете быть почти уверены, что люди использовали a4j из richfaces 3.3.x. Я решил использовать richfaces 3.3.3 вместе с jsf 2, так как это казалось посредственным изменением для обновления до richfaces 4.x. Таким образом, я сделал ваш гид (расстегнул все связанные с facelets вещи в face-config (активированный обработчик удаления удалил аннотацию taglig), затем последовал community.jboss.org/wiki/RichFaces333AndJSF20 и, наконец, должен был сделать это stackoverflow.com/questions/85532/… – Toskan 29 December 2011 в 21:19
  • 5
    Отличный ответ. В моем случае мне также пришлось установить параметр javax.faces.VALIDATE_EMPTY_FIELDS в false, чтобы получить сортировку по правильности. См. Также: stackoverflow.com/questions/6113935/… – Jasper de Vries 9 July 2014 в 14:07
  • 6
    Я также могу рекомендовать всем прочитать balusc.blogspot.nl/2011/09/communication-in-jsf-20.html – Jasper de Vries 11 July 2014 в 10:33
237
ответ дан Community 1 November 2018 в 08:15
поделиться

Если вы используете Apache Trinidad, вам также придется обновить его до версии 2.0, чтобы он поддерживал JSF 2.0. Есть дополнительная информация в Valhalla хакера .

0
ответ дан designatevoid 21 August 2018 в 14:16
поделиться

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">
2
ответ дан Pravin 21 August 2018 в 14:16
поделиться

Следует отметить, что если кто-то использует JSTL с JSF 1.2, то при обновлении до JSF2 вы должны изменить пространство имен:

http://java.sun.com/jstl / core

to:

http://java.sun.com/jsp/jstl/core

5
ответ дан Rafal G. 21 August 2018 в 14:16
поделиться
  • 1
    Примечание: это применимо только при переходе с Facelets 1.x на 2.x. – BalusC 24 May 2013 в 14:26
Другие вопросы по тегам:

Похожие вопросы: