Bedingt render-JSF h:panelGrid auf der Anwesenheit der query-string (oder ohne query-string)
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}">
InformationsquelleAutor magenta placenta | 2012-03-22
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,
Ich muss zugeben, dass dies eine ziemlich seltsame Art, mit
<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?BTW, funktioniert es ohne Rendern einer Komposition - ebenso wie das, was ich versucht habe gestern. <h:outputText value="mit param: #{param.foo== 'bar'}"/><br/> <h:outputText value="kein param: #{param.foo != 'bar'}"/> Diese Ausgabe true und false und die Arbeit richtig, aber wenn ich versuche zu Rendern, die Vorlagen, die Sie einfach nicht funktionieren. Ich wollte versuchen, ui:dekorieren als gut, aber es gab mir die doppelten ID Fehler - es schien zu ziehen, in beiden Vorlagen.
InformationsquelleAutor BalusC