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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по Spring MVC, жду советов и предложений. 
:(
    Опции темы
garbuz
Дата 14.5.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Итак господа, смотрим что получилось. Пинаем, ругаем советуем.

Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="home" class="ru.blog.web.controllers.HomePageController">
        <property name="daoFacade" ref="daoFacade"/>
    </bean>

    <bean name="post" class="ru.blog.web.controllers.PostController">
        <property name="daoFacade" ref="daoFacade"/>
        <property name="methodNameResolver" ref="postControllerResolver"/>
    </bean>

   
    <bean id="postControllerResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
        <property name="mappings">
        <props>
            <prop key="/showPost.htm">show</prop>
            <prop key="/newPost.htm">create</prop>
            <prop key="/editPost.htm">edit</prop>
        </props>
        </property>
    </bean>

    <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/home.htm">home</prop>
                <prop key="/showPost.htm">post</prop>
                <prop key="/newPost.htm">post</prop>
                <prop key="/editPost.htm">post</prop>
                           
            </props>
        </property>
    </bean>



    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value=""></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>



Получаем все посты и отображаем их на главной.
Код

public class HomePageController extends AbstractController {

    private DAOFacade daoFacade;

    public void setDaoFacade(DAOFacade daoFacade) {
        this.daoFacade = daoFacade;
    }

    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        List<Post> posts =  daoFacade.getPostDAO().getAll();
        return new ModelAndView("home", "posts", posts);
    }
}



Ниже представлена вьюха главной страницы. Интересует степерь убогости определения залогинен ли пользователи или нет, а так же то место, где я создаю ссылку на редактирование поста для его автора. Так правильно делать или же есть более красивое и правильное решение?

home.jsp
Код

<%@ include file="include.jsp" %>
<html>
<head><title>Home page</title></head>
<body>
<div style="width:900px">
    <%@ include file="header.jsp" %>

    <%
        boolean loggedIn = false;
        if (request.getUserPrincipal() != null){
            loggedIn = true;
        }
        pageContext.setAttribute("loggedIn", new Boolean(loggedIn));
    %>

    <table border="1">

        <c:forEach items="${posts}" var="post">
            <tr>
                <td colspan="2"><h4><c:out value="${post.postName}"/></h4>
                    <c:if test="${loggedIn}">
                        <c:set var="author" value="<%=request.getUserPrincipal().getName()%>"/>
                        <c:if test="${post.author.login eq author}">
                            <a href="editPost.htm?postId=${post.postId}">edit</a>
                        </c:if>
                    </c:if>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <c:out value="${post.preview}"/> <br><br>
                    <a href="showPost.htm?postId=${post.postId}">Read more >></a>
                </td>
            </tr>
            <tr>
                <td><c:out value="${post.author.login}"/></td>
                <td><c:out value="${post.createdDate}"/></td>

            </tr>
            <tr>
                <td colspan="2">
                    <c:forEach items="${post.tags}" var="tag">
                        <c:out value="${tag.tagName}"/>
                    </c:forEach>
                </td>
            </tr>
        </c:forEach>

    </table>
</div>

</body>
</html>




Код

public class PostController extends MultiActionController {

    private DAOFacade daoFacade;

    public void setDaoFacade(DAOFacade daoFacade) {
        this.daoFacade = daoFacade;
    }


    public ModelAndView show(HttpServletRequest request, HttpServletResponse response) {
        String postId = request.getParameter("postId");
        Post post = daoFacade.getPostDAO().getById(Long.parseLong(postId));
        List<Comment> comments = daoFacade.getCommentDAO().getFromPost(post);
        HashMap<String, Object> model = new HashMap<String, Object>();
        model.put("post", post);
        model.put("comments", comments);
        return new ModelAndView("post", model);
    }


    public ModelAndView create(HttpServletRequest request, HttpServletResponse response) {
        List<Category> categories = daoFacade.getCategoryDAO().getAll();
        HashMap<String, Object> model = new HashMap<String, Object>();
        model.put("categories", categories);
        return new ModelAndView("newPost", model);
    }

    public ModelAndView edit(HttpServletRequest request, HttpServletResponse response) {
        String postId = request.getParameter("postId");
        Post post = daoFacade.getPostDAO().getById(Long.parseLong(postId));
        List<Category> categories = daoFacade.getCategoryDAO().getAll();
        HashMap<String, Object> model = new HashMap<String, Object>();
        model.put("post", post);
        model.put("categories", categories);
        return new ModelAndView("editPost", model);
    }


}


Сейчас PostController занимается тем, что показывает конкретный пост, выбирает данные для создания нового поста и переправляет нас на нужную вьюху, выбирает данные для редактирования поста и перенаправляет нас на нужную вьюху. Контроллеры, которые будут создавать посты и редактировать, еще не готовы. Пока в FormController не разобрался, как-то примеров внятных не получается найти. Может кто выложит и объяснит что к чему?

И еще вопрос, который уже был выше. Итак, пользователь у нас залогинен, ему отображается ссылочка для редактирования поста типа 
http://localhost:8080/blog/editPost.htm?postId=1, он там подредактирует, отсабмитит и все окей. Если пользователь не залогинен, тогда он отсылается на форму логина, это делает сам томкат. Но что делать если пользователь залогинен, но не является автором поста но каким-то чудом узнал такую ссылку и прошел по ней. Открывается та же форма редактирования. Выше предлагались решения, пока решил остановиться на фильтре. Как в фильтре проверить может ли этот пользователь править пост или нет?


PM MAIL   Вверх
goodday1941
Дата 14.5.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



времени нет смотреть, но то что бросилось в глаз:

 <%@ include file="header.jsp" %>

скриплеты - зло - по возможности попробуй отказаться от них раз и навсегда

используй jstl теги

используй теги Spring MVC для форм которые пишуться под SimpleFormController


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
garbuz
Дата 14.5.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(goodday1941 @  14.5.2009,  16:37 Найти цитируемый пост)
<%@ include file="header.jsp" %>

скриплеты - зло - по возможности попробуй отказаться от них раз и навсегда

используй jstl теги

Окей, буду стараться.


Как на счет остальных вопросов в предыдущем посте.
PM MAIL   Вверх
garbuz
Дата 15.5.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Разбираюсь с simpleFormController. Вот цитата из Spring in Action
Цитата

Form controllers take the concept of command controllers a step further, by adding functionality to display a form when an HTTP GET request is received and process the form when an HTTP POST is received.

Значит моя писанина выше с PostController не верна! Ведь именно он сейчас отображает вьюхи с формами! Так же это значит, что мой PostController не должен быть никаким multiAction контреллером, а должен лишь выполнять одно действие - выбирать пост и отображать его.

Итак, что я понял из прочитанного. Если где-то ошибусь - прошу поправить.

1) Когда приходит GET запрос, то контроллер показываем форму, когда POST, то обрабатывает форму.
2) У бина формы есть две вьюхи - одна сама форма, вторая - куда переходим после удачной обработки формы.
3) В конструкторе контроллера можно вызвать два метода setCommandClass()setCommandName, эти же параметры мы можем указать бину через xml. Как я понимаю это класс и имя объекта, которые получатся после сабмита формы
4) В методе formBackingObject происходит создание объекта, который нам вернет сабмит формы.
5) Метод referenceData нужен для того, чтобы передать на форму какие-то доп данные. Например для создания поста, я в форму должен передать список категорий. Категории получаем именно в этом методе.
6) Метод onSubmit нужен для получения объекта из формы, дальнейшей работы с ним и перехода на successView

Непонятно следующее! Как происходит заполнение объекта данными из формы? Может кто объяснит немного? И еще интересует вопрос использования спринговых тегов, можно даже примерчик сюда кинуть ))

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


Опытный
**


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

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



Пример:
Код

<form:form commandName="form">
   <form:input path="searchValue"/>
</form>
<form:form commandName="form"> - значит, что работа будет проходить с объектом form(это который backing object). 
<form:input path="searchValue"/> - поле ввода, связанное с полем searchValue объекта form.
Спринг сам заполнит нужное поле, то есть выполнит операцию:
form.setSearchValue("введенное в поле ввода значение")

Добавлено через 6 минут и 33 секунды
Цитата

И еще вопрос, который уже был выше. Итак, пользователь у нас залогинен, ему отображается ссылочка для редактирования поста типа 
http://localhost:8080/blog/editPost.htm?postId=1, он там подредактирует, отсабмитит и все окей. Если пользователь не залогинен, тогда он отсылается на форму логина, это делает сам томкат. Но что делать если пользователь залогинен, но не является автором поста но каким-то чудом узнал такую ссылку и прошел по ней. Открывается та же форма редактирования. Выше предлагались решения, пока решил остановиться на фильтре. Как в фильтре проверить может ли этот пользователь править пост или нет?
Я выше не читал, но так понял, что Spring Security здесь не участвует? Имхо, лучше сразу делать с ним, потратишь время на решение этого вопроса иным способом, а потом снова тратить время на изучение нужного способа.

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


Опытный
**


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

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



Старовъръ, спасибо. Не мог бы код jsp скинуть, где эти теги учавствуют и есть какая-нить форма? Если есть конечно smile
PM MAIL   Вверх
Старовъръ
Дата 15.5.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Формочка пока совсем еще примитивная: парочка меток, поле ввода, сабмит и табличка:
Код

<%@include file="/WEB-INF/jspf/common/include.jspf" %>
<html>
<head><title><fmt:message key="listUser.title"/></title></head>
<body>
<div>
    <fmt:message key="listUser.title"/>
</div>
<form:form commandName="form">
    <div>
        <fmt:message key="listUesr.search"/> <form:input path="searchValue"/>
        <input type="submit" value="<fmt:message key="common.ok"/> "/>
    </div>
    <div>
        <table width="3">
            <tr>
                <th><fmt:message key="user.login"/></th>
                <th><fmt:message key="user.address.city"/></th>
                <th><fmt:message key="user.rating"/></th>
                <th><fmt:message key="user.pm"/></th>
            </tr>
            <c:if test="${fn:length(users) eq 0}">
                <tr><fmt:message key="listUser.noUsers"/></tr>
            </c:if>
            <c:forEach items="${users}" var="user" varStatus="varStatus">
                <tr>
                    <td><c:out value="${user.login}"/></td>
                    <td><c:out value="${user.address.city}"/></td>
                    <td><c:out value="${user.rating}"/></td>
                    <td><c:url value="htt://PM"/></td>
                </tr>
            </c:forEach>
        </table>
    </div>
</form:form>
</body>
</html>
</html>
Вот backing object:
Код

/**
 * @author ctapobep
 *         Date: 18.04.2009
 *         Time: 12:44:44
 */
public class SearchUsersForm {
    private final String DEFAULT_SORTED_FIELD = "login", DEFAULT_SEARCH_VALUE = "";
    private String backPage, forwardPage;
    private String searchValue;
    private String sortedField;
    private int pageNumber;

    public SearchUsersForm() {
        sortedField = DEFAULT_SORTED_FIELD;
        searchValue = DEFAULT_SEARCH_VALUE;
    }

    public String getBackPage() {
        return backPage;
    }

    public void setBackPage(String backPage) {
        this.backPage = backPage;
    }

    public String getForwardPage() {
        return forwardPage;
    }

    public void setForwardPage(String forwardPage) {
        this.forwardPage = forwardPage;
    }

    public int getPageNumber() {
        return pageNumber;
    }

    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    public String getSearchValue() {
        return searchValue;
    }

    public void setSearchValue(String searchValue) {
        this.searchValue = searchValue;
    }

    public String getSortedField() {
        return sortedField;
    }

    public void setSortedField(String sortedField) {
        this.sortedField = sortedField;
    }
}

Вот контроллер:
Код

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.search.AccountSearchRequest;
import ru.javatalks.jtchess.model.search.SearchRequest;
import ru.javatalks.jtchess.model.service.UserDetailsService;
import ru.javatalks.jtchess.web.form.SearchUsersForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ctapobep
 *         Date: 18.04.2009
 *         Time: 9:06:13
 */
public class SearchUsersController extends SimpleFormController {

    private UserDetailsService userDetailsService;
    private int recordsLimit;

    public SearchUsersController() {
        setCommandClass(SearchUsersForm.class);
        setCommandName("form");
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
                                    Object command, BindException e) throws Exception {
        SearchUsersForm form = (SearchUsersForm) command;
        ModelAndView modelAndView = new ModelAndView(getSuccessView());
        modelAndView.addObject("form", form);
        modelAndView.addObject("users", userDetailsService.getUsers(createSearchRequest(form)));
        return modelAndView;
    }

    private SearchRequest createSearchRequest(SearchUsersForm form) {
        AccountSearchRequest searchRequest = new AccountSearchRequest();
        searchRequest.setSearchField("login");
        searchRequest.setSearchValue(form.getSearchValue());
        searchRequest.setSortedField(form.getSortedField());
        String page = form.getBackPage();
        searchRequest.setLimit(recordsLimit);
        return searchRequest;
    }

    @Override
    protected Map referenceData(HttpServletRequest httpServletRequest, Object command,
                                Errors errors) throws Exception {
        SearchUsersForm form = (SearchUsersForm) command;
        Map<String, Object> attr = new HashMap<String, Object>(3);
        attr.put("users", userDetailsService.getUsers(createSearchRequest(form)));
        return attr;
    }

    public void setUsersService(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }

    public void setRecordsLimit(int recordsLimit) {
        this.recordsLimit = recordsLimit;
    }
}
Правда это у меня еще все в разработке... Спринг не так давно начал изучать.
PM MAIL WWW   Вверх
Старовъръ
Дата 15.5.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кстати, можно использовать и обычные html-теги:
<input type="textarea" name="form.searchValue">
Но если произошла ошибка и страницу нужно наново показать, то в данном случае все введенные данные потеряются. Используя же spring bind tags ничего страшного не произойдет - поля наново заполнятся.
PM MAIL WWW   Вверх
garbuz
Дата 15.5.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Старовъръ, спасибо, буду курить smile завтра )
PM MAIL   Вверх
Kangaroo
Дата 17.5.2009, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(garbuz @  15.5.2009,  15:34 Найти цитируемый пост)
Метод onSubmit нужен для получения объекта из формы, дальнейшей работы с ним и перехода на successView

Объект из формы передается как параметр в онСабмит.

По всем остальным пунктам - правильно.


--------------------
Lost....
PM MAIL MSN   Вверх
garbuz
Дата 26.5.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Появилось время, сел опять за спринг. Разбираюсь дальше с FormController.
Все вроде бы сделал правильно. 
Код

public class CreatePostController extends SimpleFormController {
    private DAOFacade daoFacade;

    public void setDaoFacade(DAOFacade daoFacade) {
        this.daoFacade = daoFacade;
    }


    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, BindException e) throws Exception {
        Post post = (Post) o;
        daoFacade.getPostDAO().create(post);
        return new ModelAndView(getSuccessView());
    }



    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        Post post = new Post();
        post.setAuthor(daoFacade.getUserDAO().getByLogin(request.getUserPrincipal().getName()));
        return post;
    }

    @Override
    protected Map referenceData(HttpServletRequest request) throws Exception {
        List<Category> categories = daoFacade.getCategoryDAO().getAll();
        HashMap<String, Object> model = new HashMap<String, Object>();
        model.put("categories", categories);
        return model;
    }
}


Код

<form:form method="POST" commandName="post">
      <table style="width:800px">
        <tr>
            <td>Choose categories</td>
            <td>
                <form:select path="categories" multiple="multiple">
                    <form:options items="${categories}" itemValue="categoryId" itemLabel="categoryName"/>
                </form:select>
            </td>
        </tr>
        <tr>
            <td>Post Name</td>
            <td>
                <form:input path="postName" />

            </td>
        </tr>
        <tr>
            <td>Preview</td>
            <td>
                <form:textarea path="preview" rows="10" cols="40"></form:textarea>
            </td>
        </tr>
        <tr>
            <td>Post Body</td>
            <td>
                <form:textarea path="postBody" rows="10" cols="40"></form:textarea>
                <input type="submit" value="submit">
            </td>
        </tr>
    </table>
    
</form:form>


Код

<bean name="createPost" class="ru.blog.web.controllers.CreatePostController">
        <property name="daoFacade" ref="daoFacade"/>
        <property name="formView" value="newPost"/>
        <property name="successView" value="post"/>
        <property name="commandClass" value="ru.blog.entity.Post"/>
        <property name="commandName" value="post"/>

    </bean>


Странно то, что после сабмита формы я не попадаю в метод onSubmit, у меня проиходит снова вызов formBackingObject и referenceData. Почему?
И еще вопрос. Например я отсабмитился, все нормально. Далее должен следовать переход на success view. А там сразу бы хотелось отобразить новый пост, а этим занимается другой контроллер. Короче надо перейти на другой конторллер и еще ему параметр передать.
PM MAIL   Вверх
garbuz
Дата 27.5.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата из Spring in action
Цитата

The onSubmit() method handles the form submission (an HTTP POST
request) by passing the command object (which is an instance of Rant) to the
addRant() method of the injected RantService reference.

Не понимаю, почему у меня после сабмита формы не вызывается этот метод. Метод пост в форме указан явно, commaddName тоже поменял с post на newPost, даже атрибут action явно указал, но все равно попадаю в formBackingObject()
PM MAIL   Вверх
Kangaroo
Дата 27.5.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(garbuz @  26.5.2009,  19:10 Найти цитируемый пост)
Странно то, что после сабмита формы я не попадаю в метод onSubmit, у меня проиходит снова вызов formBackingObject и referenceData. Почему?

formBackingObject  вызывается всегда.
А вот referenceData не должен. Может какие-то ошибки валидации и Спринг обратно показывает форму?

Попробуй:
1. Пройтись дебагом. Посмотри метод processFormSubmission , там как раз вызывается onSubmit
2. Посмотри полный лог Спринга (левел DEBUG).


Цитата(garbuz @  26.5.2009,  19:10 Найти цитируемый пост)
А там сразу бы хотелось отобразить новый пост, а этим занимается другой контроллер. Короче надо перейти на другой конторллер и еще ему параметр передать. 

В онсабмите:
Код

return new ModelAndView(new RedirectView("куда шагать"));



--------------------
Lost....
PM MAIL MSN   Вверх
garbuz
Дата 27.5.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kangaroo @  27.5.2009,  14:26 Найти цитируемый пост)
formBackingObject  вызывается всегда

Почему? Разве не только перед отображением формы? Насколько я понимаю, в этом методе создается объект, который будет запонятсья данными из формы, и его же мы получам в onSubmit как параметр. Зачем еще раз вызов метода formBackingObject(), зачем нам второй объект?
Если я неверно понимаю ситуацию - прошу объяснить smile


Цитата(Kangaroo @  27.5.2009,  14:26 Найти цитируемый пост)
А вот referenceData не должен. Может какие-то ошибки валидации и Спринг обратно показывает форму?

В методе processFormSubmission поставил брейкпоинт и обнаружил эксепшн! Там что-то не то с валидацией! Буду разбираться что. Хотя валидация явно пока еще не прикручена.



Цитата(Kangaroo @  27.5.2009,  14:26 Найти цитируемый пост)
Посмотри полный лог Спринга (левел DEBUG).

А где это можно глянуть?



PM MAIL   Вверх
garbuz
Дата 28.5.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как выяснилось, ошибка в том, что в объект в поле типа Set попадает строка. Есть на странице множественный select, как выбранные элементы списка превратить в набор и отдать его объекту?
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1207 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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