gpt4 book ai didi

java - 是否可以在 JSP 中创建本地页面范围?

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:47 26 4
gpt4 key购买 nike

我正在开发一个基于 JSP 的组件化系统。这意味着 JSP 的各个部分可以通过拖放从一个 JSP 移动到另一个 JSP,并导致需要本地页面范围作为一个 JSP 中定义的组件的变量,但可能会与另一个 JSP 发生冲突。我可以使用 Servlet 3.0/JSP 2.2/JSTL 1.2。

++ 标记文件++

这样做的直接方法是为组件或类似的东西创建一个标记文件,因为它们具有此本地页面范围。但是,对于标记文件中的每次更改,都需要重新部署,并且需要创建标记文件本身需要一些时间。但如果没有其他解决方案,这个方向(自定义标签、标签文件、JSP 包含,...)可能是可行的方法。

++ 命名空间前缀/后缀++

在 Portlet 中,应该将每个变量与 Portlet 响应对象提供的 namespace 连接起来。我可以做类似的事情,但这可能会导致副作用和意外行为。如果有人忘记为 namespace 添加前缀/后缀,当组件移动到具有冲突变量名称的其他 JSP 时,它可能会工作一段时间,但在其他时间停止工作,而无需更改代码。

++ 自定义标签包装++

我希望作为组件框架开发人员可以使用这样的组件标签的标签文件来包装组件开发人员的组件代码

<a:component>
<div data-component-id="9">
<c:set var="componentId" value="9"/>
<c:set var="path" value='${abc:getCurrentPath()}_${componentId}'/>
<c:set var="resource" value='${abc:getResourceFromPath(path)}'/>
<c:set var="val" value="${resource.getValue('paragraphValue')"/>
<p><c:out value="${value}"/></p>
</div>
</a:component>

使变量位于标记文件的本地页面上下文中。但相反,它们位于周围页面的上下文中。我正在寻找这样的东西

<% { %>
<div data-component-id="9">
<%
String componentId = 9;
String path = obj.getCurrentPath()+componentId;
Resource resource = otherObj.getResourceFromPath(path);
String value = resource.getValue("paragraphValue");
%>
<p><c:out value="<%=value%>"/></p>
</div>
<% } %>

这将创建一个代码块,其中变量有自己的命名空间。当然,对于 JSTL 和 JSTL-EL 而不是 scriptlet 代码。我查看了 JSTL 规范,但没有找到是否有办法创建这样的本地页面范围。但我没有检查所有内容,因为它很大,而且我不确定是否可以使用自定义标签。

我很清楚,较大的代码块不应该出现在 JSP 中,但通过该框架,我希望为较小的组件提供简单的解决方案。

++ 更改 JSP 代码++

当组件最初放置在 JSP 上或通过拖放移动时,我实际上将组件的 JSP 代码从一个 JSP 移动到另一个 JSP 或在 JSP 内移动。这意味着我还可以通过编程方式操作组件的 JSP 代码(如果它不是太复杂的话)并且有助于解决问题。

最佳答案

当我认为自定义标签包装可能是理想的解决方案时,我创建了另一个更具体的问题,并且我得到了答案 here这解决了问题。

只需在评估正文之前删除所有 pageContext 属性,然后在 doEndTag() 处再次添加它们即可。

关于java - 是否可以在 JSP 中创建本地页面范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com