我正在尝试在JSF中创建一个菜单模板,其中当前目录的链接具有不同的“当前”或“活动”类。代码目前看起来像:
<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>
我正在考虑使用像styleClass="#{(thisDir == currentDir) ? currentLinkClass : normalLinkClass}"
这样的东西。但是我如何获得当前路径?这是否正确,或者有更好的方法吗?
另外,我希望链接基于当前路径,而不仅仅是页面。例如,myapp/a/1.jsf
和myapp/a/2.jsf
(即myapp/a/*.jsf
)应触发A
链接的活动类。 (我希望我的解释清楚。)这可能吗?该怎么做?
非常感谢!
答案 0 :(得分:1)
您可以使用#{request.requestURI}
获取当前请求URI。如果需要,您可以使用JSTL fn
taglib中的多个EL函数在EL中进行字符串比较/操作。
您提出的EL styleClass
建议完全没问题。无论如何,没有其他简单的方法。到目前为止,您可以做的最佳优化是通过<ui:repeat>
循环呈现这些链接,以便至少消除代码重复。
答案 1 :(得分:0)
您也可以尝试使用#{view.viewId}
:
<h:outputLink
styleClass="#{(view.viewId.equals('/admin/authors.xhtml')) ? 'active' : 'inactive'}"
value="authors.xhtml">Text</h:outputLink>