Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Вопрос по Spring MVC


Автор: kozlozhop 19.4.2009, 07:55
Всем привет!! и ближе к делу smile  - есть такой маппинг:

Код

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.html">indexController</prop>                

                <!-- article -->
                <prop key="articleIndex.html">articleIndexController</prop>
                <prop key="articleDetail.html">articleDetailController</prop>
                <prop key="articleAll.html">articleAllController</prop>               

            </props>
        </property>
    </bean>


Так вот, теперь вопрос: если у меня articleIndex.html используется в jsp страницах только в инклудах(jsp:include), то, вероятно, необходимо, чтобы пользователь не мог попасть на этот самый articleIndex.html(т.к. там кроме одной таблицы ничего нет), так как это сделать?? 

ЗЫ articleIndex.html получает данные из бд, самому в голову пришло только не использовать спринг, сделать через jsp+сервлет, тогда зайти на atricleIndex.jsp не получится, но надо бы сделать через спринг..

Автор: gEndelf 19.4.2009, 14:13
для начала - если у тебя эта страница нигде не засвечена - то о её существовании догадаться практически невозможно

дальше - несколько вариантов
- JavaScript - проверка URL'a.
- в контроллере спринга - проверить request.getServletPath().

В случае проверок если урл не тот - редиректить на index.html

Автор: kozlozhop 20.4.2009, 01:59
gEndelf Спасибо зо ответ!

и еще один вопрос, по поводу Spring + Hibernate, я не совсем понимаю для чего нужно использовать транзакции, если метод реализуется через один запрос.

Код

@Override    
    public void saveUser(final UserEntity userEntity, final UserRoleEntity userRoleEntity) throws DataAccessException {
        getHibernateTemplate().save(userEntity);

        HibernateCallback callback = new HibernateCallback() {
            @Override
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                String query = "SELECT (userEntity.id) FROM UserEntity as userEntity WHERE userEntity.login = '" +
                        userEntity.getLogin() + "'";
                return session.createQuery(query).uniqueResult();
            }
        };

        userRoleEntity.setIdUser((Long) getHibernateTemplate().execute(callback));
        getHibernateTemplate().save(userRoleEntity);               
    }


вот допустим здесь мне понятен смысл наложения спринговской аннотации(она записана в сервисе, работающим с реализацей бд, т.е. commit() и roollback() здесь выполняются автоматом), т.е. я делал спецом ошибку, например в каллбаке, и видел, что транзакция не выполняется. 

А вот тут, я не могу понять , нужна транзакция, или нет:
Код

 public Collection getArticleByLimit(final int leftLimit, final int increment) {
        HibernateCallback callback = new HibernateCallback() {
            @Override
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                String query = "FROM ArticleEntity ";
                return (List<ArticleEntity>) session.createQuery(query).
                        setFirstResult(leftLimit).setMaxResults(increment).list();
            }
        };
        return (List<ArticleEntity>) getHibernateTemplate().execute(callback);
    }


т.е.  лично я не понимаю, почему в интернете, подобные примеры всегда пишут с наложением транзакции(т.е. даже на хибернатовские методы типа save, load ее ставят). Зачем она здесь?




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)