2015-09-04 96 views
1

我正在研究基于JSP的组件化系统。这意味着JSP的一部分可以通过拖放从一个JSP移动到另一个JSP,并且导致需要本地页面范围作为在一个JSP中定义的组件的变量,而我在其他JSP中发生冲突。 我可以使用Servlet 3.0/JSP 2.2/JSTL 1.2。是否可以在JSP中创建本地页面作用域?

++标记文件++

这样做,是创建组件或类似标签的文件,因为他们有这样的本地页面范围的直路。但是对于标签文件中的每一项变化,都需要重新部署,并且需要创建标签文件本身需要一些时间。但是,如果没有其他解决方案,这个方向(自定义标签,标签文件,JSP包含,...)可能就是要走的路。

++命名空间前缀/后面添加++

在门户组件都应该来连接与从portlet响应对象提供一个命名空间的每个变量。我可以做类似的事情,但这会导致副作用和意外行为。如果有人忘记给名称空间加前缀/后缀,它可能会工作一段时间,但在其他时间停止工作,而不会在组件移动到具有冲突变量名的其他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代码。

+0

我在标签文件试过这样: '的 $ {}的BodyContent' 但是,在周围的页声明的表述仍然可以取代。 – Sandro

+0

'JSP'将是这个案例研究最糟糕的解决方案。但我认为让所有编码的东西放在后面,那么这将是可能的,就像一个简单的NDI – 2015-09-05 01:44:56

回答

0

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

它只是在评估正文并在doEndTag()处再次添加它们之前删除所有pageContext属性。

相关问题