2

我正在尝试使用以下代码动态包含一个 jsp 文件:

<%@include file="menus/top/${user.roleId}.jsp" %>

在这里,变量user.roleIdint在我的 struts2 操作中设置的。我可以使用以下内容显示它:

<s:property value="user.roleId" />

我希望根据当前登录用户的 roleId 动态包含文件等menus/top/1.jspmenus/top/2.jsp但是我收到了包含标签的以下异常:

Exception Name: org.apache.jasper.JasperException: File "menus/top/${user.roleId}.jsp" not found 

我究竟做错了什么?

4

3 回答 3

3

<%@include %>是一个静态包含指令。因此,它在编译时使用,当 JSP 被编译成一个类时。这意味着不能在该指令中使用运行时变量。

您正在寻找<jsp:include>在运行时动态包含资源的 . 阅读本教程了解更多详情。

于 2013-10-26T09:17:20.307 回答
2
<%@include file="menus/top/${user.roleId}.jsp" %>

Use struts2 include tag instead

<s:include file="menus/top/%{user.roleId}.jsp"/>

Documentation clearly says include directive is not processed and hence, can't have expressions that needs runtime evaluation.

于 2013-10-29T13:52:39.010 回答
1

使用<c:import>标签。因为它用于 JSTL 中的动态包含。

其中c

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
于 2013-10-26T09:19:26.033 回答