Предположим следующее:
В файле JAR у вас есть файл META-INF / Face-config.xml со следующим правилом навигации:
<navigation-rule>
<from-view-id>/path/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/path/result.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
И я хотел быпереопределите это правило навигации в моем веб-приложении, поэтому я поместил следующее правило навигации в WEB-INF /face-config.xml следующим образом:
<navigation-rule>
<from-view-id>/path/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/path/my_custom_result.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Поэтому, когда я нахожусь на странице / path/page1.xhtml и результатом действия является success Я полагаю, что навигационный случай в WEB-INF /face-config.xml является результатом (то есть /path/my_custom_result.xhtml), но, к сожалению,Результатом является тот, который находится в jar-файле META-INF /face-config.xml (т.е. /path/result.xhtml).Хотя, глядя на код, эти два случая находятся в java.util.Set, поэтому порядок даже не гарантирован!
Первый вопрос: вы думаете, это ошибка?хотя в спецификации JSF эта ситуация не упоминается, но я думаю, что имеет смысл, чтобы локальные конфигурации face-config.xml переопределяли конфигурации в файлах jar.
Второй вопрос: я знаю, что могусоздать пользовательский NavigationHandler, но, глядя на com.sun.faces.application.NavigationHandlerImpl Я не понял, как я мог узнать, из какого файла Face-config.xml приходит NavigationCase.
Есть идеи или предложения?
Спасибо, ребята.
Относительно ответа Eelke:
Это документация ADF, я искал спецификацию JSF 2.0, котораявы можете найти здесь: http://download.oracle.com/otndocs/jcp/jsf-2.0-fr-eval-oth-JSpec/ и там я нашел следующую строку
It is an error to specify more than one <navigation-case>,nested
within one or more <navigation-rule> elements with the same
<from-view-id>matching pattern, that have exactly the same combination
of <from-xxx>, unless each is discriminated by a unique <if> element.
, которая заставляет меня думать, что то, что я пытаюсь сделать, невозможно, хотя некоторые реализации JSF могут иметь немного другоеповедение в этой ситуации (например, ADF).
Относительно дубликатов метод NavigationCase.equals проверяет, что все атрибуты одинаковы, и в моем случае toViewID отличается, поэтому они не равны.