Не получается «Страница не найдена» с JSF2.0 - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь с Javaee6 с GlassFish3.1.Я создал веб-проект (с JSF2.0) только с одним файлом: one.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <meta http-equiv="Content-Type"
        content="text/html; charset=ISO-8859-1" />
    <title>ONE</title>
</h:head>
<h:body>
    <h:form id="oneForm">
        <h:commandButton id="oneButton" value="To Two" action="two" />
    </h:form>
</h:body>
</html>

Я не добавил web.xml, так как это необязательно для javaee6,Я добавил face-config.xml , чтобы работало отображение сервлета по умолчанию.(только с верхним элементом)

<faces-config version="2.0" .../>

Когда я нажимаю командную кнопку на странице, я ожидаю ошибку «Страница не найдена».Но страница просто перезагружается.Если я на самом деле помещаю файл two.xhtml, он работает правильно, но при его отсутствии не выдает ошибку , которую я ожидаю.

Я что-то упустил, какая-то конфигурация?

Заранее спасибо.

1 Ответ

2 голосов
/ 14 июля 2011

Это ожидается. JSF работает с так называемыми навигационными кейсами. Если он не находит подходящего случая, он просто отправит обратно в тот же вид. Это указано в спецификации JSF 2.0 (выберите одну для оценки).

7.4.2 Алгоритм NavigationHandler по умолчанию

...

Реализация NavigationHandler по умолчанию должна вести себя так, как если бы она выполняла следующий алгоритм (хотя могут использоваться оптимизированные методы реализации):

  • Если вызов метода handleNavigation() не соответствует ни одному случаю навигации, это указывает на то, что текущее представление должно отображаться повторно. Начиная с JSF 2.0, нулевой результат не безусловно, все правила навигации должны быть пропускаются.

  • ...

Однако, когда вы устанавливаете стадию проекта JSF на Разработка с помощью параметра контекста в web.xml,

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>  
    <param-value>Development</param-value>
</context-param>

затем нажатие на кнопку должно привести к появлению предупреждающего сообщения о развитии в обратной передаче,

  • Невозможно найти соответствующий случай навигации с from-view-id '/one.xhtml' для действия 'two' с результатом 'two'

так, чтобы возможные ошибки разработчика были хотя бы замечены.

...