当前位置 : 主页 > 编程语言 > java >

使用pagecontext.include将页面范围属性传递给JSP以在JSTL中使用?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我们几乎逐字逐句地使用这个JSP模板解决方案: http://java.sun.com/developer/technicalArticles/javaserverpages/jsp_templates/ 当它包含JSP页面时,它使用了pageContext.include,这给我们留下了一个问题,那就是
我们几乎逐字逐句地使用这个JSP模板解决方案:

http://java.sun.com/developer/technicalArticles/javaserverpages/jsp_templates/

当它包含JSP页面时,它使用了pageContext.include,这给我们留下了一个问题,那就是我们有很多在JSP本身中初始化的scriplet代码(标签汤).我的想法是使用附加属性修改模板标记,该属性是具有init或execute方法的类的包路径引用.首先调用该执行,并在包含JSP之前添加页面上下文属性.然后我们将使用JSTL来访问这些属性.但是,我被告知这不会起作用,因为pageContext.include如何工作,并且无法传递作用于页面的属性.这是真的吗?有解决方法吗?我知道我的所有范围规则都是如此.

正确的,问题是PageContext确实是一个Page Context.当你运行include时,那个资源(假设它是一个JSP)获取它自己的PageContext,并在返回时丢失.

JSP有4个范围:Application,Session,Request和Page.每个都有自己的生命周期,应该是自我解释的.

在这里使用请求范围是正确的想法.

如果查看链接到的模板代码,那就是Insert标记正在执行的操作.在这种情况下,它将Hashtables放在请求中维护的堆栈上.

然后它使用“put”和“get”标签来打开/关闭当前“堆栈”的项目.

您可以做的一件简单事情是在PageContext.include之前,根据需要调用您的“execute”方法.让该方法只返回名称/值对的Map.然后,您可以获取该Map并填充堆栈上现有的(或很快将存在的)Hashtable.

基本上你的Init类是逻辑,类似于调用很多“put”标签.

除此之外,您的模板标签的工作方式相同.

或者您可以将结果直接合并到请求中,供JSTL使用.或者您可以保持“堆栈”性质,将您自己的“上下文”推送到请求中.

网友评论