如何将列表作为参数从一个JSP传递到Struts 2中包含的JSP?
假设您希望下面的JSP代码片段位于多个页面中,其中唯一不同的是传递给它的列表(如何将列表作为参数从一个JSP传递到Struts 2中包含的JSP?,jsp,struts2,tiles,struts-tags,valuestack,Jsp,Struts2,Tiles,Struts Tags,Valuestack,假设您希望下面的JSP代码片段位于多个页面中,其中唯一不同的是传递给它的列表(xxx) 我的第一个想法是将它放在myFragment.jsp中,在其他页面中使用s:include来包含它,并将列表作为s:param传递,如: 问题是似乎只传递字符串,所以上面的代码不起作用 我还尝试使用${param.xxx}(并尝试将myParam放入迭代器,但运气不佳 问题: 正确的方法是什么 对于这种情况,如果您希望通过将公共代码重构到统一的位置来消除JSP中的代码重复,是否有更优雅的解决方案
xxx
)
我的第一个想法是将它放在myFragment.jsp
中,在其他页面中使用s:include
来包含它,并将列表作为s:param
传递,如:
问题是
似乎只传递字符串,所以上面的代码不起作用
我还尝试使用${param.xxx}
(并尝试将myParam
放入迭代器,但运气不佳
问题:
- 例如,您有
和Page1.jsp
。两者都使用非常相似的Page2.jsp
,唯一的区别是传递给它的变量。目标是将s:iterator
重构到某个地方,以便只编写一次s:iterator
s:iterator
Page1.jsp:
Page2.jsp:
我不认为有任何理由将参数传递给标记。请注意,参数仅作为请求参数访问: 参数作为请求参数传递,因此请使用
${param.ParamName}
符号访问它们。不要使用s:property
标记访问包含文件中的参数
正确的方法是在
valueStack
上推送参数
优雅的解决方案是使用Tiles框架
Tiles是一个模板框架,旨在轻松创建具有一致外观的web应用程序页面。它可用于页面装饰和组件化
有和集成插件。我不认为有任何理由将参数传递给标记。请注意,参数仅作为请求参数访问: 参数作为请求参数传递,因此请使用
${param.ParamName}
符号访问它们。不要使用s:property
标记访问包含文件中的参数
正确的方法是在
valueStack
上推送参数
优雅的解决方案是使用Tiles框架
Tiles是一个模板框架,旨在轻松创建具有一致外观的web应用程序页面。它可用于页面装饰和组件化
有和集成插件。我实际上在应用程序中使用tiles2。但是,我不确定它在这种情况下是否有效:1.myModules刚刚通过s:include之前的s:action加载-如果您使用tiles装饰它,您将如何传递myModules变量?提前感谢您的回复。我很好奇试想一下这个tiles替代方案,虽然有点不确定它是用来传递如此小的jsp代码片段的……您可以使用属性,但是
s:action
在s:include
之前是不起作用的。另外还不清楚您是如何使用它们的。请参阅我添加到原始问题中的示例,以澄清用例。我只使用模块s
getter,在现实生活中,必须包含更多的代码,action
标记的作用几乎相同,但并不便宜。抱歉,没有理解您的意思。什么getter?您将从何处提取迭代器(基于您的Tiles建议或其他)?你能举例说明吗?我实际上在应用程序中使用tiles2。但是,我不确定它在这种情况下是否有效:1.myModules刚刚通过s:include之前的s:action加载-如果你在那里使用tiles装饰它,你将如何传递myModules变量?提前感谢你的回复。我很好奇地想一想这个问题或者,虽然有点不确定它是用来传递如此小的jsp代码片段的……你可以使用属性,但是s:action
在s:include
之前是不起作用的。另外,还不清楚你是如何使用它们的。请看我在原始问题中添加的示例,以澄清用例。我只使用模块
getter,在现实生活中,需要包含更多的代码,action
标记的作用几乎相同,但它并不便宜。对不起,没有理解您的意思。什么getter?您将从哪里提取迭代器(基于您的Tiles建议或其他)?您能举例说明吗?