Spring MVC - 表单映射

时间:2009-05-12 16:01:43

标签: java spring spring-mvc

可能遗漏了一些在这里完全明显的东西,但是这里有。我开始使用Spring MVC。我有一个表单控制器来处理对/share/edit.html的入站请求。当我从浏览器中点击此URL时,出现以下错误:

 The requested resource (/inbox/share/share/edit) is not available.

这是我的applicationContext-mvc.xml:

 <bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
        <property name="mappings" >
            <value>
                /share/edit.html=shareFormController
                /share/list.html=shareController
                /share/view.html=shareController
                /folders.json=foldersController
                /studies.json=studiesController
            </value>
        </property>
    </bean>


<bean id="internalPathMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver" />

<bean id="shareFormController" class="com.lifeimage.lila.controller.ShareFormController" />
<bean id="shareController" class="com.lifeimage.lila.controller.ShareController" >
    <property name="methodNameResolver" ref="internalPathMethodNameResolver" />
</bean>

和我的表单Controller:

public class ShareFormController extends SimpleFormController {

    public ShareFormController() {
        setCommandClass( Share.class );
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
            throws Exception {

        //controller impl...

    }



}

4 个答案:

答案 0 :(得分:1)

您应该查看视图解析器。确保它正如您认为的那样解析控制器中的逻辑名称。看起来它正在解析的名称目前不存在

答案 1 :(得分:1)

我想我已经解决了这个问题。有两个问题:

1)SimpleFormController的实现需要一个表单和成功视图;我没有在这里配置。由于这是AJAX客户端的服务器方法,因此我添加了一个Spring-JSON视图,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd”   default-lazy-init =“false”default-autowire =“no”   默认依赖性检查= “无” &GT;

<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">
        <property name="jsonErrors">
            <list>
                    <ref bean="statusError" />
                    <ref bean="modelflagError" />
            </list>
    </property>
</bean>

<bean name="statusError" 
      class="org.springframework.web.servlet.view.json.error.HttpStatusError">
      <property name="errorCode"><value>311</value></property>
</bean>
<bean name="modelflagError" 
      class="org.springframework.web.servlet.view.json.error.ModelFlagError">
      <property name="name"><value>failure</value></property>
      <property name="value"><value>true</value></property>
</bean>

可用于返回JSON的所有控制器。

2)我从SimpleURLHandlerMapping切换到ControllerClassNameHandlerMapping并依赖于Spring命名约定(controllerClassName / method.html),它修复了路由问题。可能不是一个长期的解决方案,但让我完成了任务。

答案 2 :(得分:0)

您检查了日志输出吗? Spring MVC在输出内容方面通常非常冗长。

此外,您发布的网址(/inbox/share/share/edit)似乎与您配置的网址(/share/edit.html)不匹配。

答案 3 :(得分:-1)

@ jordan002当我看到你必须跳到完成任务的所有箍时,我觉得有必要分享一个非常强大的Java MVC框架,它需要更少的配置。该框架称为Induction,请参阅文章Induction vs. Spring MVC,http://www.inductionframework.org/induction-vs-spring-mvc.html