编程语言
首页 > 编程语言> > java-如何实现动态导航而不在多个JSP / JSTL文件中重复html

java-如何实现动态导航而不在多个JSP / JSTL文件中重复html

作者:互联网

我在多个JSP文件中有以下导航代码:

<ul id="nav">
    <li ><a href="/home">Home</a></li>
    <li class="active" ><a href="/bills">Bills</a></li>
    <li ><a href="/invoices">Invoices</a></li>
</ul>

提取此代码并使活动导航元素的选择以编程方式而不是在html中手动定义的最佳方法是什么?

解决方法:

使用< jsp:include>包括可重复使用的JSP代码片段.

<jsp:include page="/WEB-INF/nav.jsp" />

使用JSTL/EL动态控制HTML输出.

<ul id="nav">
    <c:forEach items="${pages}" var="page">
        <c:set var="active" value="${fn:endsWith(pageContext.request.requestURI, page.url)}" />
        <li class="${active ? 'active' : 'none'}"><a href="${page.url}">${page.name}</a></li>
    </c:forEach>
</ul>

使用Javabean类表示可以在所有代码层中使用的模型.

public class Page {

    private String url;
    private String name;

    // Add/generate getters, setters and other boilerplate.
}

使用ServletContextListener预加载应用程序范围的数据.

@WebListener
public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        List<Page> pages = new ArrayList<Page>();
        pages.add(new Page("/home", "Home"));
        pages.add(new Page("/bills", "Bills"));
        // ...
        event.getServletContext().setAttribute("pages", pages);
    }

    // ...
}

标签:java,jsp,redundancy
来源: https://codeday.me/bug/20191208/2090204.html