Условно визуализировать JSF h:panelGrid на основе наличия строки запроса (или отсутствия строки запроса вообще)
Я пытаюсь динамически визуализировать некоторые композиции / шаблоны на основе наличия строки запроса или отсутствия строки запроса. Например:
локальный: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 ответ
Вам просто нужно обратное условие: #{param.foo != 'bar'}
, Эти условные операторы, возвращающие логические значения, не нужны, само уравнение возвращает логическое значение уже. #{param}
никогда null
, Возвращает Map<String, String>
который просто пуст (не null
!) когда он не содержит никаких параметров. Нотация в скобках полезна только тогда, когда имя параметра содержит точки, которые в противном случае были бы интерпретированы как вложенные свойства, но имена параметров запроса в любом случае не должны содержать точки.
Итак, это должно сделать:
<h:panelGrid rendered="#{param.foo == 'bar'}">
<ui:composition template="A.xhtml">...</ui:composition>
</h:panelGrid>
<h:panelGrid rendered="#{param.foo != 'bar'}">
<ui:composition template="B.xhtml">...</ui:composition>
</h:panelGrid>
В качестве другой альтернативы, если вы хотите правильно использовать условные операторы, вы также можете сделать
<ui:composition template="#{param.foo == 'bar' ? 'A' : 'B'}.xhtml">...</ui:composition>