Bedingt render-JSF h:panelGrid auf der Anwesenheit der query-string (oder keine query-string an alle)
Ich versuche, dynamisch zu Rendern, einige Zusammensetzung/templates basierend auf dem Vorhandensein von einem query-string oder das fehlen einer query-string. Zum Beispiel:
localhost:9080/myWonderfulApp/test.xhtml?foo=bar
Dieser Werke, A. xhtml wird eingezogen.
localhost:9080/myWonderfulApp/test.xhtml
Dies nicht funktioniert, B. xhtml nicht mitgezogen.
Ich habe Probleme mit dem fehlen eines query-string-Teil. Ich kann die render-A. xhtml-wenn ich den pass ?foo=bar, aber ich kann nicht scheinen, um B. xhtml gerendert, wenn ich keine query-string. Ich habe versucht, einige Varianten, die ich zunächst dachte, #{param['foo'] != 'bar' funktionieren würde, aber ich denke, dass das nicht funktioniert, weil ich nicht ein foo-Abfrage param überhaupt. Ich habe versucht, die überprüfung, ob Parameter == null, aber das hat nicht funktioniert entweder.
Ist es möglich, meine rendered-Attribut auf der Grundlage der NICHT-query-string?
Ich kann nicht setzen Sie einfach einen anderen query-string für B. xhtml, entweder ich arbeite an einer legacy app, bekommt 2 verschiedene skins, so Nachrüstung alle alten apps, die link in eine option nicht. Neue apps benutzen wird einen Abfrage-string, die alten brauchen, um eine alte Haut in Verbindung mit keine query-string.
<!--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>
Diese scheint nicht zu funktionieren, entweder:
<h:panelGrid rendered="#{empty facesContext.externalContext.requestParameterMap.foo ? true : false}">
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nur die inverse Bedingung:
#{param.foo != 'bar'}
. Diese bedingte Operatoren Rückkehr booleans sind überflüssig, die Gleichung selbst gibt einen booleschen Wert zurück bereits. Die#{param}
ist nienull
. Es gibt eineMap<String, String>
die nur leer (nichtnull
!) wenn es nicht enthalten alle Parameter. Die Klammer-notation ist nur dann sinnvoll, wenn der parameter name enthält Perioden, die sonst interpretiert werden als verschachtelte Eigenschaften, sondern request-Parameternamen sollten nicht enthalten Zeiten ohnehin.So, in diesem tun sollten:
Als eine andere alternative, wenn Sie wollen, verwenden Sie die bedingte Operatoren der rechten Weise, können Sie auch tun,
<ui:composition>
, aber ich weiß nicht, Ihren funktionalen Anforderungen und andere details, und ich habe mich selbst nie benutzt dieses Konstrukt, ich ignorierte die seltsame Verwendung. Aber nach allem, Sie nicht eher bedeuten, zu verwenden<ui:decorate>
oder zumindest<ui:include>
was wiederum uncludes eine andere Zusammensetzung?