我想为多个 Struts 操作呈现相同的 JSP。我遇到了麻烦,因为在渲染 JSP 时,bean 名称根据调用的操作而不同。所以,我不能这样称呼:
<c:out value="${myBean.myProperty}" />
因为该 Bean 不一定名为 myBean。
目前,我一直在通过将 JSP 中需要的任何常见对象放入 HttpSession 来解决这个问题。例如:
public class SampleAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
String string = "TEST";
HttpSession session = request.getSession();
session.setAttribute("sampleString", string);
return mapping.findForward("sampleAction");
}
}
然后,在JSP中,我可以简单地引用“sampleString”,它不会根据渲染Action而改变。
当然,我使用的对象比字符串大得多,如果不需要,我不想将对象放入 session 中。有什么方法可以将对象放入页面上下文或其他内容中,而不是 session 中,以便在不同的 JSP 之间共享它?
我来自 Rails 世界,所以我对 Struts 非常陌生,并且发现自己有点迷失。我必须扩展用 Struts 编写的现有应用程序。该程序实际上使用 BeanAction 将 ActionForm 与 Action 组合起来,因此上面的示例并不完全是我的代码的样子。
感谢您帮助解决我的困惑!
最佳答案
我的第一个想法是尝试将其实现为自定义标签,就像 krosenvold 在他的回答中所说的那样。但您说您是 Struts 新手,我假设您对 JSP 和 J2EE Web 开发也是新手。自定义标签并不是一个很容易的主题。
您可以使用“代理”页面通过 jsp 进行调用:包括您的目标 JSP。 jsp:include 标记可以有一个包含 jsp:param 标记的主体,您可以在其中将公共(public)变量名称映射到不同的引用。
See here for an example in jsp:param in jsp:include .
通过这样做,您将拥有一个包含真实代码的页面,以及 N 个代理来处理对复杂对象的引用。 使用自定义标签也可以,这只是另一种实现方式,我个人认为对于非 SCWCD 来说更容易实现。
关于java - 在不同的 Struts 操作类之间有效地共享 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155752/