此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【braverhamlet】截止到2008-07-17 16:05:15的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:20 每贴平均分数:10
回帖的总数量:4 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:2 结贴的总分数:20
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:50.00 % 无满意结分率:100.00%
敬礼!
楼主【braverhamlet】截止到2008-07-17 16:05:15的历史汇总数据(不包括此帖):
发帖的总数量:2 发帖的总分数:20 每贴平均分数:10
回帖的总数量:4 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:2 结贴的总分数:20
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:50.00 % 无满意结分率:100.00%
敬礼!
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/web/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean id="testDao" class="com.sysnet.sxxnh.test.dao.TestDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean name="/testController.sc" class="com.sysnet.sxxnh.test.controller.TestController">
<property name="dao" ref="testDao"/>
</bean>
<bean name="/testSimpleFormController.sc" class="com.sysnet.sxxnh.test.controller.TestSimpleFormController">
<property name="formView" value="test/addUser"/>
<property name="successView" value="testController.sc"/>
</bean>public class TestSimpleFormController extends SimpleFormController{
protected final Log logger = LogFactory.getLog(getClass());
public ModelAndView onSubmit(Object command){
User u = (User)command;
logger.info(u.getName());
return new ModelAndView(this.getSuccessView());
}
public Object formBackingObject(HttpServletRequest req){
User u = new User();
u.setName("Jack");
return u;
}
}
如上定义,我希望的流程是 进入<bean name="/testSimpleFormController.sc" class="com.sysnet.sxxnh.test.controller.TestSimpleFormController">
<property name="formView" value="test/addUser"/>
<property name="successView" value="testController.sc"/>
</bean>之后,通过successview直接转入另一个controller<bean name="/testController.sc" class="com.sysnet.sxxnh.test.controller.TestController">
<property name="dao" ref="testDao"/>
</bean>但是事实上的结果是HTTP Status 404 - /sxxnh/WEB-INF/web/testController.sc.jsp很不幸,spring把successview的设定完全当成了jsp页面的一个指定,那么在spring中应该如何实现,我不想在controller里通过request对象的方法硬编码来实现。
很不幸,spring把successview的设定完全当成了jsp页面的一个指定,那么在spring中应该如何实现,我不想在controller里通过request对象的方法硬编码来实现。
这个不是spring把你的当成jsp页面了,而是你配置了<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
<property name="prefix"><value>/WEB-INF/jsp/admin/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>这样的东西吧...如果你不加这个的话,他怎么会带上前缀和后缀??
这样配置试下,然后再去this.getSuccessView
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/test-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>*.sc</url-pattern>
</servlet-mapping>
可以看到web.xml里我给spring指定了额外的一个配置文件>/WEB-INF/spring/test-config.xml,那么现在,我想把controller-servlet.xml中的如下部分移动至test-config.xml<bean name="/testController.sc" class="com.sysnet.sxxnh.test.controller.TestController">
<property name="dao" ref="testDao"/>
</bean>
<bean name="/testSimpleFormController.sc" class="com.sysnet.sxxnh.test.controller.TestSimpleFormController">
<property name="formView" value="test/addUser"/>
<property name="successView" value="testController.sc"/>
</bean>结果是,spring找不到对应的映射了,出现如下警告信息
警告: No mapping found for HTTP request with URI [/sxxnh/test.sc] in DispatcherServlet with name 'controller'
那么,如果我希望把这些映射分担到多个配置文件中(也就是大家可以不用都来改这一个配置文件来为直接的controller添加映射关系),我应该如何做?
例如
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servletxml/admin-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>则你可以在admin-servlet.xml中配置<bean>,并且访问的controller都会以为/admin/controller的名字来访问..如果你不指定<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servletxml/admin-servlet.xml</param-value>
</init-param>也会有一个默认的会以<servlet-name>admin</servlet-name>
这个名字指定的一个admin-servlet.xml,所以如果你想达到你那种效果的话,请加上
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servletxml/admin-servlet.xml</param-value>
</init-param>并修改为<init-param>
<param-name>contextConfigLocation</param-name>
<param-value/WEB-INF/spring/test-config.xml</param-value>
</init-param>
无法带入下一个controller,试了下用forward可以
<bean name="/testSimpleFormController.sc" class="com.sysnet.sxxnh.test.controller.TestSimpleFormController">
<property name="formView" value="test/addUser"/>
<property name="successView" value="forward:/testController.sc"/>
</bean>
再次感谢。
我在web.xml里有载入其他的配置文件,是通过
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/test-config.xml</param-value>
</context-param>
来设定的,没在servlet里通过init-param设定,我还以为和
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation </param-name>
<param-value>/WEB-INF/controller-servlet.xml /WEB-INF/spring/test-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
是一样的效果呢!!
按你说的设置<init-param>的方式的确可以了,但是我现在奇怪spring的教程里似乎都是如下这样写的
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/test-config.xml</param-value>
</context-param>
我之前就没想到这两种方式居然是有区别的,又或者是我的用法不对?spring的教程我有在看,看的是官方2.5的,一边看一边调试点小例子,但是这种细节性的问题从教程里往往就是找不到,上面两个问题也是实在没办法才来请教的,以后还希望你和大家多多指教,谢谢,结帖了。