JSF публикует и перенаправляет с параметрами

Я читал несколько сообщений, в которых говорилось, что вы можете сделать следующее: Предполагая, что эта запись в faces-config.xml

..
<from-view-id></from-view-id>
<navigation-case>
  <from-outcome>home</from-outcome>
  <to-view-id>/xxx/index.xhtml</to-view-id>
</navigation-case>
..

это String в реализации действия:

return "home?param=1&faces-redirect=true";

Это не работает для меня. Это дает мне сообщение об ошибке, говорящее, что он не может соответствовать регистру навигации:

Unable to find matching navigation case with from-view-id '/xxx/yyy.xhtml' for action 'home?faces-redirect=true&param=1' with outcome 'home?faces-redirect=true&param=1

С другой стороны, если я использую полное имя представления, оно работает нормально. Это баг или я что-то не так делаю?


person Ioannis Deligiannis    schedule 05.11.2013    source источник


Ответы (1)


Вы смешиваете неявную и явную навигацию.

При явной навигации ваш код должен возвращать только результат. Вопрос о том, перенаправлять или нет, должен быть закодирован в правиле XML, а не в результате, который вы возвращаете из своего компонента.

Но, насколько мне известно, правила навигации больше не имеют реального применения. Просто удалите их и верните представление с необходимыми параметрами и параметрами перенаправления и т. д. из вашего компонента. Когда у вас будет более 10 страниц, вы будете готовы рвать на себе волосы при использовании правил навигации. (По иронии судьбы, правила навигации были созданы для управления большим количеством просмотров, но именно при большом количестве просмотров они становятся полностью и совершенно неуправляемыми)

person Mike Braun    schedule 07.11.2013
comment
Итак, вы говорите, что я не могу использовать оба. Это эффективно свяжет мой Java-код с веб-приложением, т.е. если я изменю имя представления, мне нужно будет реорганизовать код. Есть ли способ сохранить неявную навигацию и передать параметры? - person Ioannis Deligiannis; 07.11.2013
comment
@johnd действительно, изменить вид = рефакторинг. Но это нужно сделать в обоих случаях. Либо XML нужно рефакторить, либо код Java. Так или иначе имя должно измениться. Правила навигации IMO только для того, чтобы защитить вас от переименования представлений, — это обещание, которое никогда не срабатывало на практике. Но решать вам и только мои 2 цента ;) - person Mike Braun; 07.11.2013
comment
@johnd вы можете указать перенаправление через XML что-то вроде дочернего тега перенаправления или около того. Правила навигации могут использовать EL, и вы, вероятно, можете извлечь значение из своего (резервного) компонента, используя выражение EL, указывающее на его свойство. - person Mike Braun; 07.11.2013