| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Что вместо SimpleFormController? |
| Автор: Dreamtraveler 5.1.2010, 20:05 |
| Здравствуйте. Дело было так: Исползовал спринг версии 2.5 и его класс SimplFormController. Теперь вышла версия 3.0 и в ней этот класс стал depricated. Хотелось бы узнать какой класс вместо него использовать теперь, от кого наследоваться лучше? Чтоб примерно таже функциональность была. ) |
| Автор: garbuz 5.1.2010, 21:11 |
| Сам с третьим спрингом еще не работал, но подозреваю что теперь там не надо наследоваться и имплементиться. Всем рулят аннотации. |
| Автор: Dreamtraveler 6.1.2010, 09:55 |
| Неужели все так круто изменилось? придеться документацию читать... Блин только что нибуть изучишь, бум все устарело ))). |
| Автор: Dreamtraveler 6.1.2010, 13:20 |
| А подскажите, еще такое. Как объявить два резольвера. Так чтобы они обрабатывали разные запросы. Например один обрабатывает xhtml а аторой jsp. я делал так: <bean id="viewResolverOne" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.JstlView</value> </property> <property name="order" value="1"/> <property name="prefix"> <value>/</value> </property> <property name="suffix"> <!--<value>.jsp</value>--> <value>.xhtml</value> </property> </bean> <bean id="viewResolverTwo" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.JstlView</value> </property> <property name="order" value="2"/> <property name="prefix"> <value>/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> не получается. |
| Автор: magicfly 6.1.2010, 19:59 |
| Насколько я понимаю вопрос был в другом. Резолвер не занимается обработкой запроса. Он лишь составляет ответ на запрос. Кто чем будет выполнятся зависит от меппинга. Кстати проперти order определяет в какой последовательности будут вызываться резолверы. И лишь если в одном не нашел то будет вызывается другой. Вроде так, поправьте насчет резолверов если я не прав |
| Автор: garbuz 6.1.2010, 20:38 | ||
Грубо говоря резолвер нужен для того, чтобы контроллер смог передать модель данных той или иной вью, за поиск которой и отвечает резолвер. Проперти order действительно определяет порядок, однако в случает с InternalResourceViewResolver это не работает.
|
| Автор: Dreamtraveler 8.1.2010, 13:31 |
| Ага с резольверами разобрался. Читаю документацию на Spring 3.0. Раньше я от SimpleFormController расширялся и все вызывалось "само", и валидация и initBinder. А вот теперь что получается мне при помощи аннотаций самому все вызывать? Я имею ввиду, что в SimpleFormController все по определенному сценарию вызывалось GET, POST и т.д. А теперь разработчики Spring все это в мои руки отдалию Странно... Может кто-нибудь мне это разъяснит. А то я на данном этапе не понимаю пока такого... ) |
| Автор: garbuz 8.1.2010, 21:53 | ||
не было такого. |
| Автор: Dreamtraveler 11.1.2010, 15:04 |
| А вот скажите, garbuz, помойму вы создавали когда-то посто вот с такой примерно проблеммой: ERROR http-8084-2 ContextLoader:initWebApplicationContext:208 - Context initialization failed org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://java.sun.com/xml/ns/javaee] Offending resource: ServletContext resource [/WEB-INF/faces-config.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934) Вам удалось её решить? А то я не могу пока понять что за ошибка такая. Spring не хочет ужится с faces-config.xml файлом. Мне нужно определить такую конструкцию: <application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application> Может её еще где можно определить? Или в аннотациях как-то. Я использую JSF 2.0 + Spring. Хочю чтоб JSF был как view а все остальное Spring. |
| Автор: garbuz 11.1.2010, 15:29 |
| Дайте ссылку на пост. С jsf точно не я создавал, я с jsf не работал. |
| Автор: MisterCleric 11.1.2010, 17:23 | ||||
| Привет. всем. Насчет ошибки
даж не знаю что сказать? Я использую такую связку и проблем нету. Опишу что имею: 1. В либах имею такое jsf-api.jar jsf-impl.jar jstl.jar richfaces-api.jar richfaces-impl.jar richfaces-ui.jar spring-web.jar spring-webmvc.jar spring.jar standard.jar 2. faces-config.xml именно такой как описан. 3. В web.xml такое:
может быть быть проблема в том, что данный namespace действительно не принадлежит jsf 2.0? У него другой вид конфига должен быть? или SpringBeanFacesELResolver не подходит для jsf 2.0 ? |
| Автор: Dreamtraveler 11.1.2010, 20:28 |
| Ссылку дать немогу сечас, garbuz. Но там обсуждался Spring Securety. Не JSF. Просто ошибка похожая. MisterCleric, я только начал знакомиться с JSF и поэтому возникают такие веселые проблеммы. Что касается того, что SpringBeanFacesELResolver не подходит для jsf 2.0, то я коментировал этистроки и оставлял только такое: <?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== --> <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> <!--<application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application>--> </faces-config> Ошибка не уходит. А вы какой JSF используете 1.2 или 2.0? У меня включены все библиотеки кроме: richfaces-api.jar richfaces-impl.jar richfaces-ui.jar Для чего они? Конфиги такие: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/faces-config.xml, /WEB-INF/applicationContext.xml, /WEB-INF/classes/PlatsDatabase2.xml, /WEB-INF/classes/PlatsController1.xml, /WEB-INF/classes/PlatsForser2.xml </param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/log4j.properties</param-value> </context-param> <!--<context-param> <param-name>log4jExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param>--> <context-param> <param-name>webAppRootKey</param-name> <param-value>uniqueAppRootNamee</param-value> </context-param> <listener> <description>log4j - listener.</description> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <!--<init-param> <param-name>contextConfigLocation</param-name> <param-value/> </init-param>--> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value/> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!--<url-pattern>*.htm</url-pattern>--> <url-pattern>*.usr</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <!--<welcome-file>welcomeGWT.html</welcome-file>--> <welcome-file>redirect.jsp</welcome-file> </welcome-file-list> <resource-ref> <description>Jnidi by me.</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </web-app> И еще такой вопрос в JSF 1.2 использовались JSP, в 2.0 уже facelets .xhtml. Так JSP признаны устаревшими форматом для JSF? Тогда как мне определить такую конструкцию: <link rel="STYLESHEET" href="<spring:theme code="styleSheet"/>" type="text/css"/> и подключить библиотеку : <%@taglib uri="http://www.springframework.org/tags" prefix="spring" %> для этого? |
| Автор: garbuz 11.1.2010, 21:40 |
| Dreamtraveler, я нашел http://forum.vingrad.ru/forum/topic-264244/unread-1.htmlпост, там дело в либах было, пост про секьюрити. Проверь еще раз свои либы, посмотри деплоятся ли они на сервер или нет. |
| Автор: MisterCleric 11.1.2010, 23:33 | ||
Dreamtraveler, твоя ошибка вот здесь
это конфиг jsf, а не spring. его кушает javax.faces.webapp.FacesServlet А дальше они сами разруливают работу. Естественно, что для nameSpace="http://java.sun.com/xml/ns/javaee" у Spring нет хендлера Добавлено через 34 секунды да, richfaces - это конкретная реализация jsf |
| Автор: Dreamtraveler 12.1.2010, 08:52 | ||
| Спасибо, MisterCleric. Вчера я уже начал до этого доходить. "его кушает javax.faces.webapp.FacesServlet" - а как он его кушает? Чтобы Spring принял "конфиги" я ему их даю так: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value/> </init-param> <load-on-startup>2</load-on-startup> </servlet> А как javax.faces.webapp.FacesServlet'у скормить faces-config.xml? Смотрел примеры web.xml файлов, так там что-то не одной ссылки на faces-config.xml не видел и в вашем web.xml тоже. Автоматически он чтоли его ищет? тогда почему возникает такая ошибка при попытке запустить .jsp:
Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:239) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) root cause java.lang.RuntimeException: Cannot find FacesContext javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:1855) javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1672) org.apache.jsp.secureUser.userArea_jsp._jspService(userArea_jsp.java:76) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:239) org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) Я так понимаю без определения: <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> не смогу работать со Spring'овскими контроллерами. И еще вопрос: если использовать не .jsp формат, а xhtml то как подключить библиотеку : <%@taglib uri="http://www.springframework.org/tags" prefix="spring" %> Хочу научить страницу менять темы и в спринговской документации нашел такое определение: <link rel="STYLESHEET" href="<spring:theme code="styleSheet"/>" type="text/css"/> для этого и нужна библиотека. |
| Автор: MisterCleric 12.1.2010, 10:00 | ||
пропиши такое в web.xml
|
| Автор: Dreamtraveler 12.1.2010, 10:30 |
| Хорошо. Это я пропишу. Я еще вот что хочу спросить: Я там писал, что хочу подружить Spring и JSF. Так вот, сейчас я пытаюсь использовать спринговский диспечер для доступа к вьюверам т.е. файлам .xhtml и .jsp: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value/> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!--<url-pattern>*.htm</url-pattern>--> <url-pattern>*.usr</url-pattern> </servlet-mapping> В браузере вызываю: http://localhost:8084/PortalWr/user.usr В это случае и возникает вышеупомянутая ошибка. Правильно ли я поступаю или мне нужно использовать JSF'совский диспечер: <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> И в браузере вызывать: http://localhost:8084/PortalWr/faces/user.xhtml В таком случае ошибка не возникает. Но тогда гдеже Spring? Хотелось бы чтобы рулил спринговский диспечер со всеми настройками для моих контроллеров. Я планировал добится этого при помощи включения в faces-config.xml строки <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> и больше ничего. Вот и если это невозможно то как настраивать контроллеры? Раньше было так в контексте спринга: Настроил контроллеры резольверы и т.п. Теперь это надо делать в контексте JSF? |
| Автор: MisterCleric 12.1.2010, 11:16 |
| Надо читать книжку по этому поводу. У меня, собственно, так как ты и описываешь: в faces-config.xml просто лежит el-resolver, а все остальное конфигурирую в srping-контексте. Да, я не использую SpringMVC, но вью у меня полностью на JSF. Но ему, собственно, никакой MVC и не нужен - он сам такой, при чем самый мощный. Т.е. ты берешь MVC-модель из JSF, а бизнес-слой у тебя на Spring. Конечно можно и все остальные фишки JSF перенести в конфиги Spring, например конвертеры или рендеры, валидаторы ну и т.д., что раньше настраивалось в конфиге JSF, теперь будет в Spring. |
| Автор: Dreamtraveler 12.1.2010, 11:31 |
| Ладно будем изучать. Быстро не получилось. ) Кстати что на твой взгляд стоит почитать на ету тему? |
| Автор: MisterCleric 12.1.2010, 11:36 |
| http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/web-integration.html#jsf И там же будет ссылка на SpringWebFlow |
| Автор: Omut 13.1.2010, 02:37 |
Разве? |