我一定错过了一些我希望有人可以帮我解决的事情。我继承的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页面?
感谢您的任何建议。
答案 0 :(得分:1)
使用<iframe>
(出于正确的目的)没有任何问题,它们是他们的用例的最佳选择(例如,在页面中嵌入文档) 。如果你在意,请继续检查它们是否在这里被滥用。
IgniteUI的Infragistics东西似乎并不总是适合Struts2(也不是Java),它们似乎是在考虑.NET生态系统的情况下创建的。另一位用户询问了working with their File Uploader widget ...小心。
当您设置src
的{{1}}属性时,会调用该URL。由于您使用的是Struts2,因此不应该直接调用JSP,而应该是执行操作的结果。
所以......只需调用动作,而不是JSP:
<iframe>
<div class="center">
<iframe id="ifrmContent" src="defaultContet.action" />
</div>
答案 1 :(得分:1)
第一的
您可以使用CSS将页面分为页眉,页脚,菜单,正文。这是一种轻量级方法。这可以替代iframe用于您的目的。
第二
如何获取与我从菜单链接加载的内容页面相关联的动作类?
您可以将任何JSP页面的操作项指向操作servlet(struts.xml)。您必须将此JSP页面中的操作指向要在Struts.xml中映射的操作。
与struts2基本程序相同。
如果你对struts flow有基本的了解,你可以这样做。
如何才能/应该如何组织所以我不会遇到这些问题,因为我只想刷新/提交内容而不是整个主页?
如果是这种情况,您不应该使用iframe在body部分中加载内容。 iframe将为每个HTTP请求加载整个网页。
答案是将AJAX与jQuery一起使用