gpt4 book ai didi

java - 如何在 Spring MVC 中向 JSP 发送参数并获取更新的参数

转载 作者:行者123 更新时间:2023-12-01 19:13:54 25 4
gpt4 key购买 nike

我是 Spring MVC 和 JSP 开发的新手,所以请温柔地告诉我我正在做一些愚蠢的事情:P说了这么多,问题是:

我研究了一点 Spring MVC 并得到了一段很好的工作代码。现在我陷入了一个明显愚蠢的问题:似乎我无法将传递给 JSP 的对象返回到 Controller 中。我需要做的是:用户填写两个文本框,然后单击按钮,系统应该查询数据库,找到用户搜索的元素,将找到的元素添加到数组“capitolospesas”中并重新渲染包含数组中所有对象的 jsp(前一个 + 刚刚添加的对象)。

我创建的循环是:controller ---> jsp --->controller ---> jsp。映射“newProposte”使用空白值初始化页面 newEditProposte.jsp,jsp 正确获取要显示的值,用户编辑/填写所需内容并单击提交按钮。控件传递到方法“selectCapitoloSpesaFromProposte”,系统应在该方法中执行查询并将结果添加到数组“capitolospesas”中,但当我添加新对象时它始终为空,因此在页面上它仅显示找到的最后一个元素。

@RequestMapping("/newProposte")
public ModelAndView newProposte()
{
System.out.println("ProposteController.newProposte()");
ModelAndView mav = new ModelAndView();

mav.addObject("proposte", new ProposteWeb());
mav.addObject("newFlag", true);
mav.addObject("capitolospesas", new HashSet<Capitolospesa>());

mav.setViewName("proposte/newEditProposte.jsp");

return mav;
}

@RequestMapping("/selectCapitoloSpesaFromProposte")
public ModelAndView selectCapitoloSpesaFromProposte(@ModelAttribute ProposteWeb proposte, @ModelAttribute HashSet<Capitolospesa> capitolospesas)
{
ModelAndView mav = new ModelAndView();

mav.addObject("proposte", proposte);
mav.addObject("newFlag", true);
capitolospesas.add(capitolospesaDAO.findCapitolospesaByCapitoloSpesaCapitoloAndCapitoloSpesaArticolo(proposte.getCapitoloSpesaCapitoloProposte(), proposte.getCapitoloSpesaArticoloProposte()));
mav.addObject("capitolospesas", capitolospesas);

mav.setViewName("proposte/newEditProposte.jsp");

return mav;
}

jsp:

<script language="Javascript">       
function selectCapitoloSpesa()
{
alert("selectCapitoloSpesaFromProposte");
document.getElementById("tabProposteForm").action = "${pageContext.request.contextPath}/selectCapitoloSpesaFromProposte";
submitForm();
return true;
}
function submitForm()
{
alert("submit");
document.getElementById("tabProposteForm").submit();
return true;
}
</script>
....
....
the form
....
....
the foreach iterating on the array "capitolospesas" showing it in a table
....
....
<input type="button" value="selectCapitoloSpesaFromProposte" name=selectCapitoloSpesaFromProposte onclick="return selectCapitoloSpesa();">

我以这种方式发布帖子,因为根据单击的按钮(有各种按钮),我需要表单表现不同。

我阅读了各种教程,要将参数传递到 jsp 页面,我必须将它们添加到 ModelAndView 对象,并且我正确地执行了此操作。在 jsp 中,我可以访问传递给它的每个对象,在本例中为“newFlag”、“capitolospesas”和“proposte”。我不明白的是,当这些对象从 jsp 返回时,如何获取它们?到目前为止,我在保存、编辑或删除页面上唯一实体所需的唯一参数之前使用了 @ModelAttribute 注释,但现在我需要从页面获取多个对象。在上面粘贴的代码中,我尝试多次使用 @ModelAttribute 注释,但没有成功;对象“proposte”正确地填充了用户键入的内容,但我调试了代码,发现每次方法“selectCapitoloSpesaFromProposte”启动一个新数组“capitolospesas”时都会实例化,而不是从我之前传递的数组中获取值到jsp。

如果有人有任何建议,请发表。

最佳答案

当 JSP 发送到客户端(即呈现为 HTML)时,唯一保留的数据是生成的 HTML 文档中的数据。不存在 Java 对象,只有文本 - 可以作为表单提交返回到服务器。因此JSP可以访问java对象,但是一旦生成了网页,它就被遗忘了。请记住:网页只是一个文本文档,Web 浏览器和服务器之间交换的所有内容都是文本。 Java 对象不会被传递。

要保留 java 对象(您可以在提交表单时修改该对象),您必须将其存储在其他地方。具体来说,您将使用 session 对象直接存储该对象,或者存储指向它的其他指针(例如,您可以用来引用数据库条目的登录名,或者要从中读取的文件名等)。

要在普通 servlet 中使用 session 值,请执行以下操作:

HttpSession session = request.getSession(true);
session.setAttribute( "keyForObject", myObject );

存储对象。。。那么

HttpSession session = request.getSession(true);
myObject = (ObjectType)session.getAttribute( "keyForObject" );

检索它。

在Spring RequestMapping中,只需要添加一个HttpSession参数即可获取session对象:

@RequestMapping
public void myMethod(... HttpSession session)

关于java - 如何在 Spring MVC 中向 JSP 发送参数并获取更新的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com