I’m trying to create a menu template in JSF where the link for the current directory has a different “current” or “active” class. The code currently looks like:
<ul>
<li><h:outputLink value="#{request.contextPath}/a/">A</h:outputLink></li>
<li><h:outputLink value="#{request.contextPath}/b/">B</h:outputLink></li>
<li><h:outputLink value="#{request.contextPath}/c/">C</h:outputLink></li>
</ul>
I’m thinking of using something like styleClass="#{(thisDir == currentDir) ? currentLinkClass : normalLinkClass}". But how do I get the current path? Is this even correct, or is there a better way to do this?
Also, I want the links to base on the current path, not just the page. For example, myapp/a/1.jsf and myapp/a/2.jsf (that is, myapp/a/*.jsf) should trigger the active class for the A link. (I hope my explanation is clear.) Is this possible? How should this be done?
Thank you very much!
You can use
#{request.requestURI}to get the current request URI. You can if necessary use several EL functions from JSTLfntaglib to do some string comparisons/manipulations in EL.Your proposed EL
styleClasssuggestion is perfectly fine. There is no other easy way anyway. Best optimization which you could do so far is to render those links in a loop by an<ui:repeat>so that code duplication is at least eliminated.