想象一下,您希望下面的 JSP 代码片段位于多个页面中,其中唯一不同的是传递给它的列表(xxx
在示例中)。
<s:iterator value="%{#xxx}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>
我的第一个想法是将它放入myFragment.jsp
并s:include
在其他页面中使用以包含它,并将列表作为 传递s:param
,例如:
<s:include value="/myFragment.jsp">
<s:param name="xxx" value="%{#myModules}"></s:param>
</s:include>
问题是<s:param>
似乎只传递字符串,所以上面的代码不起作用。
我也尝试过使用<s:set var="myParam">${param.xxx}</s:set>
(并尝试放入myParam
迭代器,但没有运气。
问题:
正确的方法是什么?
对于这种情况,您想通过将公共代码重构到统一位置来删除 JSP 中的代码重复,是否有更优雅的解决方案?
编辑(示例):
- 您拥有
Page1.jsp
和的示例Page2.jsp
。两者都使用非常相似s:iterator
的 ,唯一的区别是传递给它的变量。目标是将 重构s:iterator
到某个地方,以便您只编写一次。
s:iterator
自然地,在现实生活中,除了要重构的代码之外,还有更多的代码。
Page1.jsp:
<s:action name="MyAction" var="xxx"></s:action>
<s:iterator value="%{#xxx}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>
Page2.jsp:
<s:iterator value="%{#variableFromStack.modules}" var="module" status="stat">
<s:property value="#module.name"/>
</s:iterator>