Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SpringMVC. Form submit doesn't work 
V
    Опции темы
Старовъръ
Дата 2.6.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



startGame.jsp
Код

<form:form commandName="command">
    <jsp:include page="/WEB-INF/template/inputFields.jsp"/>
    <br/><input type="submit" value="<spring:message code="startGame.start"/>"/>
</form:form>
Кусок из DispatcherServlet:
Код

    <bean name="startGameController"
          class="ru.javatalks.jtchess.web.controller.StartGameController">
        <property name="commandName" value="command"/>
        <property name="successView" value="home.do"/>
        <property name="formView" value="startGame.do"/>
    </bean>
Когда нажимаю на сабмит формы, onSubmit() контроллера не вызывается, форма просто перегружается и все. Контроллер расширяет SimpleFormController. 
Вот собственно и вся проблема smile
PM MAIL WWW   Вверх
garbuz
Дата 2.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Возможно из-за валидации, или из-за бандинга данных в объекты. Давай код показывай smile
PM MAIL   Вверх
Старовъръ
Дата 2.6.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Код чего?

Это сообщение отредактировал(а) Старовъръ - 2.6.2009, 11:48
PM MAIL WWW   Вверх
garbuz
Дата 2.6.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(Старовъръ @  2.6.2009,  11:44 Найти цитируемый пост)
Код чего?

Контроллера и вьюхи.
А еще советую в контроллере переопределить методы родителей, с простым вызовом super, расставить брэйкпоинты и тогда точной поймешь, где все обрывается. Хотя бы вот этот метод
Код

@Override
    protected ModelAndView processFormSubmission(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {
        return super.processFormSubmission(request, httpServletResponse, o, e);    //To change body of overridden methods use File | Settings | File Templates.
    }

Если до него не дойдет вызов, тогда скорее всего валидация.
PM MAIL   Вверх
Старовъръ
Дата 2.6.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Этот метод отрабатывает) Страницу я выше показал, вот контроллер, все лишнее убрал:
Код

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import ru.javatalks.jtchess.model.entity.game.BaseGame;
import ru.javatalks.jtchess.model.entity.game.Color;
import ru.javatalks.jtchess.model.entity.game.Player;
import ru.javatalks.jtchess.model.entity.user.User;
import ru.javatalks.jtchess.model.helper.FigureHelper;
import ru.javatalks.jtchess.model.security.AuthorizationService;
import ru.javatalks.jtchess.model.service.GameDetailsService;
import ru.javatalks.jtchess.model.service.UserDetailsService;
import ru.javatalks.jtchess.web.form.FormInput;
import ru.javatalks.jtchess.web.form.StartGameForm;
import ru.javatalks.jtchess.web.util.GameUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

/**
 * 23.05.2009 13:57:57
 *
 * @author ctapobep
 */
public class StartGameController extends SimpleFormController {
    public StartGameController() {
        setCommandClass(StartGameForm.class);
    }

    @Override
    protected Map referenceData(HttpServletRequest request, Object command,
                                Errors errors) throws Exception {
        Map<String, Object> attributes = new HashMap<String, Object>(3);
        attributes.put("inputs", getInputs());
        return attributes;
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
                                    Object command, BindException e) throws Exception {
        StartGameForm form = (StartGameForm) command;
        GameUtil gameUtil = new GameUtil(gameDetailsService, userDetatilsService);
        User user = gameUtil.getUser(AuthorizationService.getPrincipal().getUsername());

        Set<Player> players = new HashSet<Player>(1);
        players.add(createPlayerForCurrentUser(form));

        BaseGame game = new BaseGame();
        if (form.getTitle().length() == 0) {
            form.setTitle("Unnamed");
        }
        game.setDateBegin(new DateTime());
        game.setTitle(form.getTitle());
        game.setPlayers(players);
        user.addPlayer(players.iterator().next());
        gameDetailsService.saveGame(game);
        return new ModelAndView(getSuccessView());
    }
}



Это сообщение отредактировал(а) Старовъръ - 2.6.2009, 12:29
PM MAIL WWW   Вверх
garbuz
Дата 2.6.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



а где код inputFields.jsp, полей то в вышеуказанном коде не видно smile 
И покажи класс StartGameForm

Добавлено через 3 минуты и 25 секунд
Да, вот еще workflow SimpleFormController'a, может пригодится
GET
user posted imagePOSTuser posted image
PM MAIL   Вверх
Старовъръ
Дата 2.6.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Цитата

а где код inputFields.jsp, полей то в вышеуказанном коде не видно
А толку от него, сабмит же не работает) 
Код

<table>
    <c:forEach var="item" items="${inputs}">
        <tr>
            <td><spring:message code="${item.label}"/></td>

            <c:if test="${item.inputType eq 'INPUT'}">
                <td><form:input path="${item.inputPath}"/></td>
            </c:if>
            <c:if test="${item.inputType eq 'PASSWORD'}">
                <td><form:password path="${item.inputPath}"/></td>
            </c:if>
            <c:if test="${item.inputType eq 'TEXTAREA'}">
                <td><form:textarea path="${item.inputPath}"/></td>
            </c:if>
            <c:if test="${item.inputType eq 'COMBO'}">
                <td><form:select path="${item.inputPath}">
                    <c:forEach items="${item.data}" var="item">
                        <form:option value="${item.value}">
                            <c:out value="${item.key}"/>
                        </form:option>
                    </c:forEach>
                </form:select></td>
            </c:if>
            <td><form:errors path="${item.inputPath}"/></td>
        </tr>
    </c:forEach>
</table>
Вот поля из StartGameForm.java:
Код

    private String title;
    private int minimumOpponentRatingDifference;
    private int maximumOpponentRatingDifference;
    private boolean withoutRating;
    private String color;
    private DateTime timePerMove;
Остальное - геттеры/сеттеры.
PM MAIL WWW   Вверх
garbuz
Дата 2.6.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Либо я что-то не понял, либо еще что-то, но 
1) Объект StartGameForm, который ты пыатешься получить в onSubmit, ты должен создаваться в formBackingObject.
2) Этот объект будет заполняться данными со страницы, для этого нужно явно указать какое поле на странице соответствует полю объекта. А у тебя, насколько я вижу, поля на странице не соответствуют полям объекта.
PM MAIL   Вверх
Старовъръ
Дата 2.6.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



1. Я в конструкторе указал комманд-класс, он должен создаться и без переопределения formBackingObject().
2. Я создал спец. класс, в который помещаю тип инпута, текст и прочую информацию. Создаю коллекцию объектов этих классов и на странице прохожу по ней и создаю нужные инпуты. 
3. Это на сабмит не влияет smile
4. Валидации у меня нет для этой формы(на будущее).

Это сообщение отредактировал(а) Старовъръ - 2.6.2009, 14:17
PM MAIL WWW   Вверх
Старовъръ
Дата 3.6.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Проблема была в том, что комманд-объект принимал строку в то время, когда поле было другого типа. Вылетало исключение, но никак не отображалось... 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0992 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.