gpt4 book ai didi

java - 是否可以将 Spring 模型对象作为 Spring 形式的值?

转载 作者:行者123 更新时间:2023-11-30 18:15:30 25 4
gpt4 key购买 nike

我基本上有以下 jsp,它检索 spring 模型广告列表 ${myAdverts} 附带的广告对象。

我希望当其中一个被点击时,一个发布请求被提交回我的 Controller ,但带有一个广告对象的实例。这有可能吗?

这是我的 JSP 代码:

<xc:forEach var="advertisement" items="${myAdverts}" varStatus="stats">
<li>

<a class="furtherinfo-link" onclick="javascript:submitJoin(${stats.count})" >${advertisement.getName()}</a>
</li>
</xc:forEach>
<form:form id="myform" method="POST" action="form_submit.html" commandName="myForm" name="MyForm">
<form:input id="advertisementObj" path="advertisementObj" type="hidden"/>
</form:form>

这是我尝试使用受 spring MVC 和 javascript 中自动填充列表处理启发的 javascript 发回帖子:

javascript代码

 <script src="js/webmenu_nav.js"></script>

<script type="text/javascript">
function submitJoin(position){
$('#advertisementObj').val("myAdverts["+position+"]");

document.MyForm.submit();
}

</script>

该代码的当前行为是我总是在 Controller 对象的 post 方法上得到一个空的 advertisementObj。

Controller 对象非常简单,但为了以防万一,它是其代码的一部分:

@Controller
public class MyController {

@RequestMapping(value="/show_advertisements.html",method = RequestMethod.GET)
public ModelAndView showAdv(@RequestParam(value="response", required=false) String incomingResponse) {

Map<String, Object> model = new HashMap<String, Object>();
model.put("response", incomingResponse);

List<AdvertisementRecord> adverts = methodThatReturnsList();
model.put("myAdverts", adverts);

MyForm jform = new MyForm();
model.put("myForm", jform);

return new ModelAndView("show_advertisements", model) ;
}

@RequestMapping(value = "/form_submit.html", method = RequestMethod.POST)
public ModelAndView formSubmit(MyForm myForm, BindingResult result, Map model){


if(null != myForm.getAdvertisement())
return showPage("adver " + myForm.getAdvertisement().getId());
else
return showPage("null advertisement on join");


}

}

解决方案!!

解决方案代码片段

JSP代码:

<xc:forEach var="advertisement" items="${myAdverts}" varStatus="stats">
<li>
<a class="furtherinfo-link" onclick="javascript:submitForm(${stats.count})" >${advertisement.getName()}</a>
</li>
</xc:forEach>
<form:form method="POST" id="theForm" action="form_submit.html" modelAttribute="myAdverts" name="MyForm">
</form:form>

JavaScript:

<script src="js/webmenu_nav.js"></script>

<script type="text/javascript">
function submitForm(position){
$('#theForm').attr("action","form_submit.html?position="+position);

document.MyForm.submit();
}

</script>

</head>

Controller :

 @Controller
@SessionAttributes("myAdverts")
public class MyController {

@RequestMapping(value="/show_advertisements.html",method = RequestMethod.GET)
public ModelAndView showAdv(@RequestParam(value="response", required=false) String incomingResponse) {

Map<String, Object> model = new HashMap<String, Object>();
model.put("response", incomingResponse);

List<AdvertisementRecord> adverts = methodThatReturnsList();
model.put("myAdverts", adverts);

//MyForm jform = new MyForm();
//model.put("myForm", jform);

return new ModelAndView("show_advertisements", model) ;
}

@RequestMapping(value = "/form_submit.html", method = RequestMethod.POST)
public ModelAndView formSubmit(@RequestParam("position") final int position, @ModelAttribute("adverts") @Valid List<AdvertisementRecord> adverts, BindingResult result, Map model){


if(null != adverts && null != adverts.get(position))
return showPage("adver " + adverts.get(position).getId());
else
return showPage("null advertisement ");


}

}

请注意上面的代码,当我调用“form_submit.html?position="+position"

时,将请求参数放在签名的首位很重要

最佳答案

默认情况下,您放入模型中的对象仅适用于当前请求。这意味着您的 myAdverts 列表在第二个请求(即 POST 请求)中不再存在。但是,您可以使用 @SessionAttribute 注释告诉 spring mvc 将对象存储在 http-session 中,这样您就可以在进一步的请求中访问它们。

你的 Controller 看起来像这样:

@Controller
@SessionAttributes("myAdverts")
public class MyController {
@RequestMapping(value="...", method=RequestMethod.GET)
public void get(ModelMap model){
List myAdverts = // get your list of adverts.
model.put("myAdverts", myAdverts)
}

@RequestMapping(value="...", method=RequestMethod.POST)
public void post(@RequestParam("position") final int position, @ModelAttribute("myAdverts") List myAdverts,SessionStatus sessionStatus){
myAdverts.get(position);
// ...

// tell spring to remove myAdverts from session
sessionStatus.setComplete();
}
}

有关 @SessionAttribute 的更多信息,请查看 here .

关于java - 是否可以将 Spring 模型对象作为 Spring 形式的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380346/

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