Назначение jsf-api.jar и jsf-impl.jar [duplicate]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

6
задан BalusC 17 July 2015 в 08:47
поделиться

1 ответ

Я предполагаю, что вы не используете настоящий сервер приложений Java EE, например WildFly , TomEE , GlassFish и т. д., но бобовидный JSP / контейнер сервлетов, такой как Tomcat , который действительно не поставляется с JSF из коробки, и вам пришлось вручную его установить. В противном случае вся эта суета с JAR не нужна.


Является ли это jsf-api или jsf-impl? Или мы должны включить оба?

Вам нужны оба. jsf-api.jar содержит API, которые существуют почти только абстрактные классы и интерфейсы. Это типы javax.faces.*, которые вы импортируете и используете в своем коде. jsf-impl.jar содержит реализацию, которая существует из настоящего жесткого рабочего кода. Реализация внутренне загружается через заводы в API. Это классы com.sun.faces.*, которые вы не должны импортировать и использовать непосредственно в своем коде. Если вы это сделаете, вы не сможете переключиться на другую реализацию JSF, такую ​​как MyFaces.


И если это так, то почему они не объединены ?

Существует объединенный JAR, javax.faces.jar. Вы можете выбрать этот вариант вместо двух свободных JAR. Просто перейдите в раздел Download на главной странице Mojarra , чтобы найти ссылку на репозиторий Maven с файлами javax.faces.jar. В настоящее время последняя версия Mojarra - 2.2.11 , поэтому выберите javax.faces-2.2.11.jar .

См. Также:

7
ответ дан Community 18 August 2018 в 07:22
поделиться
  • 1
    Я узнал о зависимости от зависимостей & lt; dependency & gt; & Lt; идентификатор_группа & GT; javax.faces & л; / GroupID & GT; & Lt; артефакт & GT; javax.faces-апи & л; / артефакт & GT; & Lt; & версии GT; 2,2 & л; / & версии GT; & Lt; / зависимость & GT; Название этой банки отличается, но говорит, что это главный файл POM для реализации Oracle JSF 2.2 Specification. – Bharat Bisht 17 July 2015 в 10:52
Другие вопросы по тегам:

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