Нужна помощь в получении формы Spring для работы - PullRequest
0 голосов
/ 18 октября 2011

Я нахожусь в процессе написания веб-приложения Spring, и дела шли хорошо. Я пытаюсь написать форму, которая позволяет администратору изменять некоторые основные данные пользователя. Однако при отправке формы я получаю сообщение об ошибке HTTP 400, в котором говорится, что запрос, отправленный клиентом, был «синтаксически неверным». Это не предлагает никакой полезной информации, хотя я действительно просмотрел все и понятия не имею, что я могу делать неправильно. Вот JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>

<div align="center">
<s:url value="/admin/access" var="access_url" />
<sf:form method="POST" modelAttribute="user" dojoType="dijit.form.Form">
    <script type="dojo/method" event="onSubmit">
    if (!this.validate()) {
        return false;
    }
    return true;
</script>
<table>
    <tr>
    <td align="right">Username: </td>
    <td>
        <sf:input path="username" dojoType="dijit.form.ValidationTextBox" trim="true" required="true"/>
    </td>
    </tr>
    <tr>
    <td align="right">Password: </td>
    <td>
        <sf:input path="password" type="password" dojoType="dijit.form.ValidationTextBox" required="true"/>
    </td>
    </tr>
    <tr>
    <td align="right">Enabled: </td>
    <td>
        Yes<sf:radiobutton path="enabled" value="true" dojoType="dijit.form.RadioButton"/> 
        No<sf:radiobutton path="enabled" value="false" dojoType="dijit.form.RadioButton"/>
    </td>
    </tr>
    <tr>
    <td align="right">Admin: </td>
    <td>
        Yes<sf:radiobutton path="isAdmin" value="true" dojoType="dijit.form.RadioButton"/> 
        No<sf:radiobutton path="isAdmin" value="false" dojoType="dijit.form.RadioButton"/>
    </td>
    </tr>
    <tr>
    <td align="right" colspan="2">
        <button dojoType="dijit.form.Button" type="submit">Submit</button>
    </td>
    </tr>
</table>
</sf:form>
</div>

Вот метод, который в конечном итоге будет вызываться в контроллере, хотя он не зашёл так далеко:

@RequestMapping(value="/admin/editUser", method=RequestMethod.POST)
public String submitEditUser(@RequestParam("user") NFIUser nfiUser) {

А вот отображение GET с того же контроллера, хотя форма отлично отображается, и все значения правильно отображаются в форме, поэтому я не знаю, что здесь есть какие-либо проблемы:

@RequestMapping(value="/admin/editUser", method=RequestMethod.GET)
public void showEditUser(Model model, @RequestParam("username") String username) {
    ....
    model.addAttribute("user", user);
}

В любом случае, если у кого-то есть мысли, пожалуйста, дайте мне знать. Я успешно исправляю ошибки, с которыми сталкиваюсь весь день, но, похоже, не вижу проблем с этим. Благодаря.

Ответы [ 2 ]

1 голос
/ 19 октября 2011

попробуйте удалить @reqiestParam из метода submitEditUser.

0 голосов
/ 19 октября 2011

Оказывается, ответ был комбинацией того, что все оставили здесь. Обычно для Spring вам не нужен метод действия в форме, но в этом случае он получился из-за того, как я загружал форму, в итоге она была необходима для перезаписи действия, загружаемого Spring. 1001 *

Также удаление бита @RequestParam ("пользователь") решило проблему ошибки 400. Поскольку в этот раз я использовал теги Spring, чтобы все было хорошо связано, я думаю, мне не нужен бит RequestParam. Очевидно, у меня пока нет лучшего понимания того, когда они нужны и не нужны.

В любом случае, я отмечал ответы людей, но технически ни один из них не был полным решением, поэтому я опубликовал это. Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...