【问题标题】:Struts2 action class when loading page加载页面时的Struts2动作类
【发布时间】:2015-02-16 18:29:03
【问题描述】:

我一定遗漏了一些东西,希望有人能纠正我。我继承的 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:select 元素列表的 OGNL 不起作用。具体来说,这将起作用:“%{@com.my.class@countryList}”,因为它在该 Java 服务器类中调用静态变量,但这不会:“%{getCities()}”,因为它正在寻找调用动作类的方法..没有。它不调用主页面动作,也不调用内容页面动作类。

如何获取与从菜单链接加载的内容页面相关联的操作类?或者,鉴于我只想刷新/提交内容而不是整个 MAIN 页面,如何/应该如何组织这些问题?

感谢您的建议。

【问题讨论】:

    标签: jsp struts2 single-page-application ognl


    【解决方案1】:
    1. 使用&lt;iframe&gt;s 没有任何问题(出于正确的目的),它们是用例的最佳选择(例如,在页面中嵌入文档)。如果您在意,请继续检查它们是否在此处被滥用。

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

    3. 当您设置&lt;iframe&gt;src 属性时,将调用该URL。由于您使用的是 Struts2,因此不应直接调用任何 JSP,它们应该是动作执行的结果。

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

      <div class="center">
          <iframe id="ifrmContent" src="defaultContet.action" />
      </div>
      
      $("#ifrmContent").attr('src','newContent.action');
      

    【讨论】:

      【解决方案2】:

      第一
      您可以使用 css 将页面划分为页眉、页脚、菜单、正文。这是一种轻量级的方法。这可以根据您的目的替换 iframe。

      • iFrame 会将框架作为单独的页面加载。如果您在正文区域编写一个带有 1 个 iframe 的页面,就像加载 2 个页面一样,这会使页面加载速度变慢一些。
      • iframe 内容将首先加载,然后网页内容将被渲染,这就是为什么您会发现某些网页中的某些内容被快速填充,而其他内容的加载延迟。
      • 您可以使用 iFrame 加载广告,但请尽量避免。

      第二
      如何获取与我从菜单链接加载的内容页面相关联的操作类?
      您可以将任何 JSP 页面的操作项指向操作 servlet(struts.xml)。您必须将此 JSP 页面中的一个动作指向您想要在 Struts.xml 中映射的动作。

      它与基本的struts2程序模型相同。 如果您对 struts 流程有基本的了解,则可以这样做。

      如何/应该如何组织它,所以我没有这些问题,因为我只想刷新/提交内容而不是整个主页面?

      如果是这种情况,您不应该在正文部分使用 iframe 进行内容加载。 iframe 将为每个 HTTP 请求加载整个网页。
      答案是使用 AJAX 和 jQuery

      【讨论】:

      • 如果您以编程方式有任何疑问,请告诉我。顺便说一句,如果有帮助,你可以接受我的回答
      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多