【发布时间】:2018-02-05 23:52:22
【问题描述】:
我在控制器中有以下代码
private static final String CJOB_MODEL = "cJobNms";
@RequestMapping(value = MAIN_VIEW, method = RequestMethod.POST)
public String showTestXsd(//@ModelAttribute(FORM_MODEL) TestXsdForm xsdForm,
//@ModelAttribute(MODEL) @Valid
//TestXsdTable testXsdTable,
@RequestParam String selected,
Model model) throws DataException {
String cJobNm =null;
List<String> cJobNmList = null;
System.out.println("selected:"+ selected);
String xsdView = testXsdService.getXsdString();
cJobNmList = testXsdService.getCJobNm();
Set<String> cJobNmSet = new HashSet<String>(cJobNmList);
TestXsdForm xsdForm = new TestXsdForm();
model.addAttribute("xsdView", xsdView);
model.addAttribute("xsdFormModel", xsdForm);
model.addAttribute(CJOB_MODEL, cJobNmSet);
xsdForm.setXsdString(xsdView);
return MAIN_VIEW;
}
以及我的jsp中的以下代码。
<form:form modelAttribute="testXsdTable" name="xsdForm" action="/xsdtest/testXsdTables"
id="xsdForm" method="POST" class="form"
enctype="multipart/form-data" >
<tr>
<td>
<label for="cJobs" class="fieldlabel">Jobs:</label>
<select id="cJobs" name="cJobs" >
<option value="${selected}" selected>${selected}</option>
<c:forEach items="${cJobNms}" var="table">
<c:if test="${table != selected}">
<option value="${table}">${table}</option>
</c:if>
</c:forEach>
</select>
</td>
</tr>
<pre>
<c:out value="${xsdForm.xsdString}"/>
</pre>
<div class="confirmbuttons">
<a href="#"class="button positive" id="saveXsdButton" onclick="saveTestXsd();">
<span class="confirm">Save</span>
</a>
</div>
当用户从 cJobNms 列表中选择一个选项时,所选值应显示在控制器方法 showTestXsd 中。请让我知道我做错了什么。
目前我收到一条消息:不支持请求方法“GET”
@RequestMapping(value = SAVE_VIEW, method = RequestMethod.POST)
public String saveTestXsd( @ModelAttribute(MODEL) @Valid
TestXsdTable testXsdTable,
final BindingResult result,
final Principal principal,
Model model) throws DataException {
boolean isNew = true;
System.out.println("entering saveTestXsd in controller");
Map<String,Object> modelMap = model.asMap();
String xsdView = (String)modelMap.get("xsdView");
System.out.println("xsdView:::"+ xsdView);
if(testXsdTable!= null){
System.out.println("xsdView(testXsdForm):::"+ testXsdTable.getXsdView());
}
// Check for validation errors
if (result.hasErrors()) {
return SAVE_VIEW;
}
// Get the user information
User loggedInUser = (User) ((Authentication) principal)
.getPrincipal();
return SAVE_VIEW;
}
【问题讨论】:
-
抱歉贴了这么多代码让大家对这个问题有所了解,我已经贴出来了,我正在学习Spring MVC。希望这个网站的人在发布这么多代码时不会发现问题。如果是这种情况,请道歉.....
-
我在帖子中的评论的意思是当前显示作业下拉列表,当我选择一个值时,我希望所选值在控制器方法中可用以打印。
-
请显示
saveTestXsd()的javascript。此外,您可以编辑您的问题以添加更多详细信息。 -
我有一个 onchange 方法,但我从表单中取出了这个调用。我能够提醒选择的值,但我不确定如何在控制器中获取该值。我在 Js 中有这两行。
-
<a>元素就像一个链接,它发送一个 GET。在发送 get 之前,由于您的postForm,您正在发送一个由您的@RequestMapping处理的 POST,但您永远看不到响应,因为它隐藏在 ajax 调用中。<a>点击通过并尝试对显然不受支持的当前 URL 执行 GET。尝试在saveTestXsd()的 javascript 末尾添加return false;。
标签: java spring jsp spring-mvc jstl