Java 如何基于其他页面操作自动重新加载jsp

Java 如何基于其他页面操作自动重新加载jsp,java,spring,jsp,Java,Spring,Jsp,我有一个我无法处理的情况,这就是为什么我需要你的帮助。 我有一个jsp页面(如下图所示),其中有许多行,每个行都可以编辑。 在jsp页面的末尾,有一个打印页面数据的选项。 现在,如果某个主体单击edit链接/按钮,另一个页面将打开,其中包含该特定行的数据,用户可以在第二个页面(即eb)中修改数据。 现在,我想,一旦用户保存了B页,就应该自动刷新一页,以提供用于打印的更新数据 请指导我如何做到这一点。我正在为java应用程序使用SpringMVC框架。 可以这样实现。按照上面提到的步骤操作 1]

我有一个我无法处理的情况,这就是为什么我需要你的帮助。 我有一个jsp页面(如下图所示),其中有许多行,每个行都可以编辑。 在jsp页面的末尾,有一个打印页面数据的选项。 现在,如果某个主体单击edit链接/按钮,另一个页面将打开,其中包含该特定行的数据,用户可以在第二个页面(即eb)中修改数据。 现在,我想,一旦用户保存了B页,就应该自动刷新一页,以提供用于打印的更新数据

请指导我如何做到这一点。我正在为java应用程序使用SpringMVC框架。

可以这样实现。按照上面提到的步骤操作

1] 当您单击页面A中的编辑按钮时,将行的id作为请求参数传递给页面B

2] 在页面B中,JSP接收行的id并将其存储在隐藏元素中

3] 在页面a中创建一个JavaScript函数,该函数应接收行Id和修改后的数据作为参数。将此函数命名为updateRows(rowId,modifiedData)。在此函数中,使用javascript编写代码,用修改后的数据更新id为“rowId”的

4] 现在,当您单击第B页中的“保存并关闭”按钮时,使用调用服务器保存数据。如果保存成功,则调用函数updateRows,将隐藏元素中存储的rowId和修改后的数据作为参数传递给它。此函数将使用最新数据更新DOM


这样,您将避免进行服务器调用以刷新数据

满足您需求的Spring MVC方法是:

  • 页面A中的
    Edit
    按钮应该是调用页面B的链接,带有要编辑行的id,类似于
  • 第B页中的
    SaveAndClose
    按钮应该是一个提交按钮,用于将编辑的值发布到控制器方法。在服务器端处理之后,控制器方法应该重定向到页面A。作为一个副作用,您可以使用避免再次发送丑陋内容的?"

当然,这将在同一窗口中显示所有页面


如果要在B页的
Save&Close
上重新显示包含pageA的窗口,但仍允许服务器知道该保存,则应重定向到特殊页面(如pageC)它只包含要求浏览器重新显示pageA的javascript代码。您可以在隐藏字段中传递包含pageA的窗口的名称,也可以决定作为web应用程序的程序员,您知道它应该在哪里。

如果您不想使用ajax,还有一种方法

在页面A中定义javascript函数refreshPageA()。在此函数中添加页面刷新逻辑。 当您单击页面B中的“保存并关闭”按钮时,将数据保存在服务器中并转发到普通jsp。在此jsp中声明一个onload处理程序。在onload处理程序中添加以下代码

opener.refreshPageA();
window.close()

这将刷新pageA并关闭PageB窗口

您可以在“编辑”按钮上出现clcik时打开弹出窗口。单击“打开”窗口,该窗口具有指向新JSP的URL。或者,只要单击“编辑”按钮,您就可以在该框架中打开新页面。您为什么不尝试寻找ajax调用来实现相同的效果,就像单击“保存并关闭”按钮一样se试着重新加载..@SaviNuclear重新加载什么?B页面与Ank you Serge完全不同。我知道你提到的所有过程。我不确定我是否使用重定向,它会刷新已打开的A页面。让我试试。@user3378974:只有在同一浏览器窗口中打开pageA和pageB时,此过程才有效。如果你使用不同的窗口,你必须使用客户端javascript,因为服务器无法了解你的本地窗口。正如我所想,这不符合我的目的。它不刷新A页,而是在B窗口中打开刷新的A页。但是我希望以前打开的A页应该刷新,B页应该关闭。你能给出一个例子吗充分的还是空洞的想法@Serge@user3378974:查看我的编辑。但我无法在这方面进一步帮助您,因为我远不是JavaScript专家:-(.IMHO,如果你不知道如何做javascript部分,你应该问一个标记为javascript的新问题,参考这个问题的上下文并解释你现在的困境。感谢你的回答Kugve。但是..在第4点,你提到了“使用调用服务器保存数据”…如何?这应该是一个html表单提交,提交后,窗口将关闭,现在我如何在js方法中检索更新的数据,该方法将从另一个页面调用?(正如您所说的“如果保存成功,则调用函数updateRows传递它,并在隐藏元素中存储rowId”)。我很困惑,要实现这一点,您需要对服务器进行AJAX调用,以便处理响应。有什么原因您不想在这里进行AJAX调用吗?正如我提到的,这必须使用脚本完成。服务器不知道发送响应的窗口。使用AJAX,您可以轻松完成此操作。我在我的使用AJAX执行上述步骤的项目
@RequestMapping(path = "...", method = RequestMethod.POST)
public String saveAndClose(...) {
    ...
    return "redirect:/path/to/pageA";
}