加载页面时的Struts2动作类

时间:2015-02-14 23:03:01

标签: jsp struts2 single-page-application ognl

我一定错过了一些我希望有人可以帮我解决的事情。我继承的webapp使用struts2和JSP页面,我想使用这个布局管理器(http://igniteui.com/layout-manager/border-layout-markup)来组织它。左侧将有一个菜单,其中包含将内容加载到中心的链接,而“主页”页面(页眉,页脚,左侧菜单)保留在我认为符合SPA原则的位置。中间的“内容”将是JSP页面,其中包含在用户操作后提交的输入字段的表单。

我不理解的是struts行为如何适应这一点。该应用程序具有在struts.xml中定义的操作,并且在提交该页面/表单时可以正常工作。但是当新JSP加载到主页的内容部分时呢?如何或与该加载相关的行动?

目前,主页面使用iframe作为内容:

<div class="center">
    <iframe id="ifrmContent" name="iframe" src="jspDefaultContent.jsp" </iframe>
</div>

当在左侧菜单中点击链接时,这就是我切换内容的方式:

$("#ifrmContent").attr('src','jspNewContent.jsp');

首先我应该问这是否是正确/最好的方法,因为我已经看到/听说过使用iframe并不理想。

其次,具体问题是没有与此新JSP内容页面加载相关联的“操作”。因此,用于填充某些s:选择元素列表的OGNL与数据库中的数据不起作用。具体来说,这将起作用:“%{@ com.my.class@countryList}”,因为它在该Java服务器类中调用一个静态变量,但这不是:“%{getCities()}”因为它想要调用一个动作类的方法..并且没有。它不会调用MAIN页面操作,也不会调用内容页面操作类。

如何从菜单链接中加载与我正在加载的内容页面相关联的动作类?或者,如果我可以/应该如何组织所以我没有这些问题,因为我只想刷新/提交内容而不是整个MAIN页面?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

  1. 使用<iframe>(出于正确的目的)没有任何问题,它们是他们的用例的最佳选择(例如,在页面中嵌入文档) 。如果你在意,请继续检查它们是否在这里被滥用。

  2. IgniteUI的Infragistics东西似乎并不总是适合Struts2(也不是Java),它们似乎是在考虑.NET生态系统的情况下创建的。另一位用户询问了working with their File Uploader widget ...小心。

  3. 当您设置src的{​​{1}}属性时,会调用该URL。由于您使用的是Struts2,因此不应该直接调用JSP,而应该是执行操作的结果。

    所以......只需调用动作,而不是JSP:

    <iframe>
    <div class="center">
        <iframe id="ifrmContent" src="defaultContet.action" />
    </div>
    

答案 1 :(得分:1)

第一
您可以使用CSS将页面分为页眉,页脚,菜单,正文。这是一种轻量级方法。这可以替代iframe用于您的目的。

  • iFrame会将框架作为单独的页面加载。如果您在正文区域中编写一个包含1个iframe的页面,则会加载2页,这会使页面加载速度变慢。
  • iframe内容将首先加载,然后将呈现网页内容,这就是为什么您会发现某些网页中的某些内容会快速填充,而其他内容正在加载延迟。
    < / LI>
  • 您可以使用iFrame加载AD,但请尽量避免使用。

第二
如何获取与我从菜单链接加载的内容页面相关联的动作类?

您可以将任何JSP页面的操作项指向操作servlet(struts.xml)。您必须将此JSP页面中的操作指向要在Struts.xml中映射的操作。

与struts2基本程序相同。 如果你对struts flow有基本的了解,你可以这样做。

如何才能/应该如何组织所以我不会遇到这些问题,因为我只想刷新/提交内容而不是整个主页?

如果是这种情况,您不应该使用iframe在body部分中加载内容。 iframe将为每个HTTP请求加载整个网页。
答案是将AJAX与jQuery一起使用