此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【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%                  
敬礼!

解决方案 »

  1.   

    第一个问题是-关于spring两个controller之间直接跳转的问题<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/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对象的方法硬编码来实现。
      

  2.   


    很不幸,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>这样的东西吧...如果你不加这个的话,他怎么会带上前缀和后缀??
      

  3.   

    你每次只要转发VIEW的话,viewResolver会自动的加上这个prefix和suffix在你的view的名称的前后
      

  4.   

    <property name="successView"><value>redirect:/相对的文件夹路径/testController.sc</value></property>
    这样配置试下,然后再去this.getSuccessView
      

  5.   

    第二个问题是昨天提出的一个无人问津的问题,上述第一个问题中的spring相关的xml定义位于controller-servlet.xml中,controller-servlet.xml是spring默认使用的config文件名,因为web.xml中我的定义如下:<context-param>
    <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添加映射关系),我应该如何做?
      

  6.   

    当如果你配置一个DispatcherServlet时候,则会对应一个servlet名字-servlet.xml
    例如
    <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>
      

  7.   

    我建议你最好还是下一个spring的资料,好好看看他的mvc,几种controller的作用也是不一样的
      

  8.   

    非常感谢,第一个问题解决了,redirect是重定向,在前面一个controller里request.setAttribute或者new ModelAndView("","key",object);
    无法带入下一个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>
    再次感谢。
      

  9.   


    我在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的,一边看一边调试点小例子,但是这种细节性的问题从教程里往往就是找不到,上面两个问题也是实在没办法才来请教的,以后还希望你和大家多多指教,谢谢,结帖了。