I am new to spring and I am facing the following issue:
编辑说明:
我能够通过创建一个新的控制器和ModelAndView方法进行POST调用,但现在我面临的另一个问题是数据没有从JSP传递到控制器。 我的JSP代码是:
form:form method="POST" action="UserOperation"
modelAttribute="DebitModel">
<h3>Debit</h3>
<c:if test="${!empty listAccounts}">
<select name="item" id="account_dropdown"
onchange="changeAccountDetails(this.options[this.selectedIndex].value)">
<c:forEach items="${listAccounts}" var="account">
<option
value="${account.accID},${account.acctype},${account.balance}">AccID:
${account.accID} Balance: ${account.balance}</option>
</c:forEach>
</select>
<br>
<br>
<label ><b>Account ID: </b></label>
<label id="accIdText" path="accID">${listAccounts[0].accID}</label>
<label><b>Account Type: </b></label>
<label id="accTypeText" path="acctype">${listAccounts[0].acctype}</label>
<label><b>Balance: </b></label>
<label id="accBalText" path="balance">${listAccounts[0].balance}</label>
</c:if>
<br> <br> Enter Amount<input type="text"
id="amount" width="80" path="amount"></input> <br> <br>
<input type="submit" value="Debit"></input>
</form:form>
有一个名为DebitModel的普通bean类。 我试图搜索并在许多地方没有传递数据并找到解决方案形式:输入提到但是如果我使用它我得不到Binding FoundException'java.lang.IllegalStateException:BindingResult和bean名称'DebitModel都没有普通的目标对象'可用作请求属性 '即使&lt;%@ taglib uri =“http://www.springframework.org/tags/form”prefix =“form”%&gt;在场。
The Controller class Code:
@Controller
@RequestMapping(value = "/UserOperation")
public class DebitController {
@Autowired
private AccountService mAccountService;
@RequestMapping(method = RequestMethod.POST)
public ModelAndView registerCustomer(@ModelAttribute("DebitModel") DebitModel debitModel, BindingResult result,
HttpServletRequest request) throws NoSuchAlgorithmException, FileNotFoundException {
ModelAndView modelAndView = new ModelAndView();
System.out.println("data------------------------" + debitModel.toString());
return modelAndView;
}
}
答案 0 :(得分:0)
显示您的控制器类。
似乎你在路径定义中使用了错误的模式。尝试在jsp和控制器级别将&#34; / UserHomeDebit&#34; 更改为&#34; UserHomeDebit&#34; 。
在提交表单时,可以使用浏览器网址进行检查。让我们认为你的应用程序名称是 sampleapplication 。那么url将是
<强> http://localhost:8080/sampleapplication 强>
然后,如果您使用/ UserHomeDebit作为控制器路径映射,则url将更改为以下内容。
<强> http://localhost:8080/UserHomeDebit 强>
所以错误的是正确的必须
<强> http://localhost:8080/sampleapplication/UserHomeDebit 强>
所以只需像我之前所说的那样改变路径并检查
答案 1 :(得分:0)
在<form:form>
标记的操作属性中,您必须指定应用程序的完整URL路径。有几种方法可以做到,但最简单和优雅的两种方法是:首先通过<c:url>
标记指定网址。为此,首先需要对JSTL c前缀进行分解。您可以通过在jsp页面的开头添加以下行来完成此操作:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
然后设置预期网址(http://localhost:8080/[your-app-name] / UserOperation ):
<c:url value="/UserOperation" var="actionUrl" />
并将该url变量传递给表单的 action 属性:
<form:form method="POST" action="${actionUrl}" ...
要做到这一点的第二个解决方案,更简单但不确定是否更优雅的是直接在action
属性中获取应用Spring表达式语言的上下文url并附加与Controller方法对应的url部分:
<form:form method="POST" action="${pageContext.request.contextPath}/UserOperation" ...