JSF Attribute von Komponenten aus ManagedBeans ändern?

moresekt

Mitglied
Hi Leute, ich schonwieder.

Ich saß heute den ganzen Tag an folgendem Problem: Ich habe eine JSF2.0-Anwendung und benutze zur Navigation Tabs. Je nach dem auf welcher Seite ich gerade bin, soll das Tab farblich via CSS markiert werden.

Java:
        <ul class="css-tabs">
                    <li><h:link styleClass="selected" value="Home" outcome="#{indexController.viewName}"/></li>
                    <li><h:link styleClass="" value="Resources" outcome="#{resourceController.viewName}"/></li>
                    <li><h:link styleClass="" value="Rules" outcome="#{ruleController.viewName}"/></li>                    
                    <li><h:link styleClass="" value="Search Results" outcome="#{searchController.viewName}"/></li>

</ul>

--> Das markierte Tab hat die Style-Klasse "selected", alle anderen keine.

Frage: Wie kann ich die anderen Links auf selected setzen, z.B. wenn ich auf eine andere Seite navigiere? Oder auch: Wie ändert man in ManagedBeans die Attribute von Komponenten?

Vielen Dank schonmal und schönes Wochenende. (Werde erst am Montag wieder reingucken)

ps: Bitte keine Vorschläge wie "benutze doch ICEFaces oder MyFaces". Ich habe einfach keine Zeit mich in weitere Frameworks reinzulesen und hätte es wenn dann früher machen sollen.
 
Zuletzt bearbeitet:
G

gman

Gast
Vielleicht in jeder ManagedBean eine Variable
Code:
private String styleClass;
welche die Style-Klasse hält:

Code:
styleClass="#{indexController.styleClass}"

und dann jeweils die Klasse setzen oder einen leeren String angeben. Könnte funktionieren, aber ob es
schön ist?
 

JanHH

Top Contributor
Oder, wenn man die Style-Classes nicht als Strings vercodet in den Klassen haben will, die Links doppeln:
Java:
<li>
   <h:link styleClass="selected" value="Home" outcome="#{indexController.viewName}" rendered="#{indexController.selected}"/>
   <h:link styleClass="notSelected" value="Home" outcome="#{indexController.viewName}" rendered="#{not(indexController.selected)}"/>
</li>

Ähm, aber ich würd das nicht in diese ul-/li-Tags packen.. lieber ein panelGrid. Generell, KEIN HTML-Code in JSF-Seiten!
 

JanHH

Top Contributor
Hm also erstmal "macht man das halt so" ;-), ausserdem kann es vorkommen, dass der erzeugte HTML-Code nicht korrekt ist. Hatte mal eine JSF-Seite, die im firefox normal angezeigt wurde, aber im Internet-Explorer nicht. Problematisch ist vor allem HTML-Code innerhalb iterativer Tags, wenn ich mich recht erinnere. In der Seite, die bei mir das Problem verursachte, war ein h:panelGrid, innerhalb dessen HTML-Code, dieser wurde aber ausserhalb der vom panelgrid erzeugten table platziert (weil JSF die reinen HTML-Tags auch als Bestandteil des PanelGrid behandelt hat).
Java:
Also z.B. aus
<h:panelGrid columns="1">
   <b><h:outputText="hallo" /></b>
</h:panelGrid>
wurde da in etwa
Java:
<table>
   <tr>
      <td>
         <b>
      </td>
   </tr>
   <tr>
      <td>
         Hallo
      </td>
   </tr>
   <tr>
      <td>
         </b>
      </td>
   </tr>
</table>
Und das </b>-Tag in der Zelle wollte der MS IE nicht. Also es gibt sicher viele Fälle, in denen es problemlos funktioniert, aber oftmals halt auch nicht. Und um das zuvermeiden, find ichs sinnvoller, von vorneherein keine HTML-Tags zu verwenden (was ja auch wirklich nicht notwendig ist. Man kann alles machen, auch ohne HTML-Tags). Ist einfach sauberer. Und wenns doch mal notwendig ist (ich brauchte z.B. einmal eine javascript-Funktion im body), kann man das ja explizit in das f:verbatim-Tag schreiben.
 

Ähnliche Java Themen

Neue Themen


Oben