使用POST请求时,Spring MVC无法在控制器中找到方法

时间:2015-10-04 23:01:29

标签: java spring jsp spring-mvc

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;
    }

}

2 个答案:

答案 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" ...