jsp中有两种包含模式,一种是<%@ include file="要包含的页面路径" %>,这种叫静态包含,另一种是<jsp:include page="要包含的页面路径" /> ,这叫做动态包含.
静态包含是直接把要包含的页面原样嵌入总的页面后再统一编译,而动态包含总的页面和要嵌入的页面是分开编译的.
现在看到这两种包含的意义了么?jsp是建议我们凡是*.jsp的页面如果要被另一个页面包含,那么应该用<jsp:include ...>动态包含,如果只是html或者是一段文本,那么用动态包含和静态包含都可以.因此原则上我们都倾向于使用<jsp:include>动态包含.
但是我们项目中遇到一种特殊情况:一个动态的*.jsp页面,它里面是动态生成的表单元素,我们把它做为一个组件,其它*.jsp页面如果要用这个组件表单的话直接把它包含到自己页面的<form>标签内.实现这个功能明显应该用动态包含,因为组件jsp的页面完全是"动态"生成的,但是这样做在总页面的js脚本中就有问题了,因为这两个页面是分开编译的,有不同的document树,而总页面中的document是取不到组件jsp页面中的表单元素的,即document.getElementById("组件jsp中的表单元素ID")完全失效.
后来想到一个办法,你知道怎么着?我们把组件的*.jsp改名为*.txt,把里面<%@ page contentType="" %>元素抽到总的页面里去,都不去理会*.txt的java编译报错代码,在总页面中直接<%@ include file=""%>,看到了么?动态的页面用静态包含!这样*.txt 中的代码会原封不动的嵌到总页面中,页面只有一个document树在内存中,这样再document.getElementById("组件中的元素id")就完全没问题了.
由此可见,虽然jsp规范中定义了动态页面的<jsp:include>包含方式,但对一些特殊情况,完全可以绕开jsp规范的限制以求得更加灵活的效果的,以上意见供大家参考,不对之处欢迎斧正!
静态包含是直接把要包含的页面原样嵌入总的页面后再统一编译,而动态包含总的页面和要嵌入的页面是分开编译的.
现在看到这两种包含的意义了么?jsp是建议我们凡是*.jsp的页面如果要被另一个页面包含,那么应该用<jsp:include ...>动态包含,如果只是html或者是一段文本,那么用动态包含和静态包含都可以.因此原则上我们都倾向于使用<jsp:include>动态包含.
但是我们项目中遇到一种特殊情况:一个动态的*.jsp页面,它里面是动态生成的表单元素,我们把它做为一个组件,其它*.jsp页面如果要用这个组件表单的话直接把它包含到自己页面的<form>标签内.实现这个功能明显应该用动态包含,因为组件jsp的页面完全是"动态"生成的,但是这样做在总页面的js脚本中就有问题了,因为这两个页面是分开编译的,有不同的document树,而总页面中的document是取不到组件jsp页面中的表单元素的,即document.getElementById("组件jsp中的表单元素ID")完全失效.
后来想到一个办法,你知道怎么着?我们把组件的*.jsp改名为*.txt,把里面<%@ page contentType="" %>元素抽到总的页面里去,都不去理会*.txt的java编译报错代码,在总页面中直接<%@ include file=""%>,看到了么?动态的页面用静态包含!这样*.txt 中的代码会原封不动的嵌到总页面中,页面只有一个document树在内存中,这样再document.getElementById("组件中的元素id")就完全没问题了.
由此可见,虽然jsp规范中定义了动态页面的<jsp:include>包含方式,但对一些特殊情况,完全可以绕开jsp规范的限制以求得更加灵活的效果的,以上意见供大家参考,不对之处欢迎斧正!