Conditionnellement rendre JSF h:panelGrid fondée sur la présence de la chaîne de requête (ou pas de chaîne de requête à tous)
Je suis en train de dynamiquement rendu composition/modèles basés sur la présence d'une chaîne de requête ou de l'absence d'une chaîne de requête. Par exemple:
localhost:9080/myWonderfulApp/test.xhtml?foo=bar
Cela fonctionne, A. xhtml se tire à l'intérieur.
localhost:9080/myWonderfulApp/test.xhtml
Cela ne fonctionne pas, B. xhtml n'est pas retiré dans.
Je vais avoir des problèmes avec l'absence d'une partie de chaîne de requête. Je peux rendre A. xhtml quand je passe ?foo=bar, mais je n'arrive pas à obtenir B. xhtml rendu quand je n'ai pas de chaîne de requête. J'ai essayé quelques variantes, j'ai d'abord pensé que #{param['foo'] != 'bar' pourrait fonctionner, mais je pense que cela ne fonctionne pas car je n'ai pas de foo requête à tous les param. J'ai essayé de vérifier si param == null mais cela ne fonctionne pas non plus.
Est-il possible de mettre mon rendu attribut basé sur AUCUNE chaîne de requête?
Je ne peux pas juste mettre une autre chaîne de requête pour B. xhtml, soit que je suis en train de travailler sur une application héritée qui obtient 2 thèmes différents, de sorte que la modernisation de tous les applications anciennes que le lien n'est pas une option. De nouvelles applications pourront utiliser une chaîne de requête, les anciens ont besoin pour obtenir une vieille peau liaison avec pas de chaîne de requête.
<!--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>
Cela ne semble pas fonctionner, soit:
<h:panelGrid rendered="#{empty facesContext.externalContext.requestParameterMap.foo ? true : false}">
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de l'inverse de la condition:
#{param.foo != 'bar'}
. Ces opérateurs conditionnels retour des booléens sont inutiles, l'équation elle-même renvoie un booléen déjà. Le#{param}
n'est jamaisnull
. Elle renvoie uneMap<String, String>
qui est juste vide (pasnull
!) quand il ne contient pas tous les paramètres. Le corset de la notation est utile uniquement lorsque le paramètre le nom contient des périodes qui serait autrement être interprétées comme des propriétés imbriquées, mais demande des noms de paramètre ne devrait pas contenir de points de toute façon.Donc, cela devrait le faire:
Comme une alternative, si vous voulez utilisez les opérateurs conditionnels de la bonne façon, vous pouvez également faire
<ui:composition>
, mais comme je ne sais pas votre exigence fonctionnelle et d'autres détails et j'ai moi-même jamais utilisé cette construction, j'ai juste ignoré l'étrange usage. Mais après tout, n'avez-vous pas dire plutôt à utiliser<ui:decorate>
ou au moins<ui:include>
qui à son tour uncludes une autre composition?