关于 Java / JSP 中的静态 include 的问题

2014-09-30 07:34:56 +08:00
 andybest
主页面 A.jsp 代码:
<%
Dog dog=...;
Cat cat=...;
%>
<%@ include file="B.jsp"%>

如果按以上方式,在被 include 的 B.jsp 中可以直接使用 dog,cat(这是因为静态包含被编译成一个class)

想知道有没办法让 B.jsp 成为一个变量,同时不修改 B.jsp 代码情况下仍然可以直接使用 dog,cat 变量?
即:
<%
Dog dog=...;
Cat cat=...;
String includeFile="B.jsp";
%>
<%@ include file="<%=includeFile%>"%>

当然,上面的语法错误也肯定跑不通,有什么办法可以让这个逻辑可以实现?
难道只能是使用动态 include 并逐个传递 dog,cat 变量给 B.jsp?可以传递这种自定义类吗?
2165 次点击
所在节点    问与答
5 条回复
qping
2014-09-30 07:57:25 +08:00
说说什么业务场景下需要这么写吧?
tremblingblue
2014-09-30 08:24:37 +08:00
我也碰到过个场景,就是想运行时动态include模版,但又不想使用动态标签,担心性能问题。

最后换了方式,没这样弄
andybest
2014-09-30 13:34:40 +08:00
@tremblingblue 也就是静态include的确无法使用变量作为include文件名?
SoloCompany
2014-09-30 14:53:20 +08:00
1. 真心不建议这样写,用标签可以少很多坑,比如
<%@ taglib prefix=“i" tagdir="/WEB-INF/tags/includeFiles” %>
<i:B cat=“<%= cat %>” dog=“<%= dog %>” />

当然,标签名字就更不可能动态化了,但你最好先想清楚自己的业务逻辑为什么要这么别扭的代码
如果真需要动态 include,你也应该考虑把调用关系反向处理,把 cat / dog 这些变量的定义放到另一个被 include 文件里面,然后在 A.jsp / B.jsp 里面 include

2. 真的需要动态 include,你还是选择 <jsp:include /> 标签或者是 <c:import /> 吧
这些都不是编译时 include,参数传递必须要显式的,不愿意改太多代码的话,可以通过 request scope 来传递
tremblingblue
2014-09-30 16:03:10 +08:00
@andybest 嗯,因为静态include不是运行时的,反正我也没想到什么办法hack过去。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/136458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX