Условно визуализировать JSF h: panelGrid на основе наличия строки запроса (или отсутствия строки запроса вообще) - PullRequest
2 голосов
/ 23 марта 2012

Я пытаюсь динамически визуализировать некоторые композиции / шаблоны на основе наличия строки запроса или отсутствия строки запроса. Например:

локальный: 9080 / myWonderfulApp / test.xhtml Foo = бар

Это работает, A.xhtml втягивается.

локальный: 9080 / myWonderfulApp / test.xhtml

Это не работает, B.xhtml не втягивается.

У меня проблемы с отсутствием части строки запроса. Я могу отобразить A.xhtml, когда передам? Foo = bar, но я не могу воспроизвести B.xhtml, когда у меня нет строки запроса. Я пробовал некоторые варианты, я изначально полагал, что # {param ['foo']! = 'Bar' будет работать, но я думаю, что это не работает, потому что у меня вообще нет параметра foo запроса. Я пытался проверить, если param == null, но это тоже не сработало.

Можно ли установить мой отображаемый атрибут на основе НЕТ строки запроса?

Я не могу просто установить другую строку запроса для B.xhtml, так как я работаю над устаревшим приложением, которое получает 2 разных обложки, поэтому переоборудование всех старых приложений, которые ссылаются, не вариант. Новые приложения будут использовать строку запроса, старые должны получить ссылку на старый скин без строки запроса.

<!--This works-->
<h:panelGrid rendered="#{param['foo'] == 'bar' ? true : false}">
    <ui:composition template="A.xhtml">...</ui:composition>
</h:panelGrid>

<!--This doesn't work-->
<h:panelGrid rendered="#{param == null ? true : false}">
    <ui:composition template="B.xhtml">...</ui:composition>
</h:panelGrid>

Похоже, это тоже не работает:

<h:panelGrid rendered="#{empty facesContext.externalContext.requestParameterMap.foo ? true : false}">

1 Ответ

1 голос
/ 23 марта 2012

Вам просто нужно обратное условие: #{param.foo != 'bar'}.Эти условные операторы, возвращающие логические значения, не нужны, само уравнение возвращает логическое значение уже.#{param} никогда не бывает null.Он возвращает Map<String, String>, который является просто пустым (не null!), Когда он не содержит никаких параметров.Нотация в скобках полезна только в том случае, если имя параметра содержит точки, которые в противном случае были бы интерпретированы как вложенные свойства, но имена параметров запроса в любом случае не должны содержать точки.

Итак, это должно сделать:

В качестве другой альтернативы, если вы хотите правильно использовать условные операторы, вы также можете сделать

<ui:composition template="#{param.foo == 'bar' ? 'A' : 'B'}.xhtml">...</ui:composition>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...