Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取表格';在用户使用Spring MVC提交数据后,它是什么?_Java_Exception_Spring Mvc_Forms Authentication_Java.lang.class - Fatal编程技术网

Java 如何获取表格';在用户使用Spring MVC提交数据后,它是什么?

Java 如何获取表格';在用户使用Spring MVC提交数据后,它是什么?,java,exception,spring-mvc,forms-authentication,java.lang.class,Java,Exception,Spring Mvc,Forms Authentication,Java.lang.class,我收到一条错误消息: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.ClassCastException:java.lang.Object不能强制转换为com.crimetrack.business.Login Login.java public class Login { private String userName; private String password;

我收到一条错误消息: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.ClassCastException:java.lang.Object不能强制转换为com.crimetrack.business.Login

Login.java

public class Login {

    private String userName;
    private String password;
    private boolean loggedin;

    public Login(){};

    /**
     * @return the loggedin
     */
    public boolean isLoggedin() {
        return loggedin;
    }

    /**
     * @param loggedin the loggedin to set
     */
    public void setLoggedin(boolean loggedin) {
        this.loggedin = loggedin;
    }

    /**
     * @param userName
     * @param password
     */
    public Login(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    /**
     * @return the userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * @param userName the userName to set
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

}


在“onSubmit”方法中,您正在将
命令
强制转换为
登录

显然不是。请尝试以下解决方案:

JSP

<form:form action="yourUrl" modelAttribute="login" method="POST">
<% ... %>
</form:form>
解释

注释
@modeldattribute
的作用与
model.addAttribute(字符串名称、对象值)
完全相同。例如,
@modeldattribute Login
model.addAttribute(“Login”,new Login())相同

也就是说,使用
onGet
方法,您可以将这样一个对象传递给视图。由于属性
modeldattribute=“login”
,标签
将查看模型的属性列表,找到一个名为
login
的属性。如果找不到,将抛出异常

然后,这就是神奇的部分:使用标签
,Spring MVC将自动设置bean的属性
userName
,该属性位于
modelAttribute=“login”
属性中,即在您的情况下,
login
。如果您放置了类似于
的内容,它将抛出一个异常,因为bean
Login
没有这样的属性

因此,最后,在您的
onSubmit
方法上(再次感谢注释
@modeldattribute
),您可以访问
登录
bean,该bean以前由Spring MVC自动索引

注意

我个人(几乎)从未使用过
ModelAndView
实例,但按照以下步骤操作:

// the methods can have the name you want
// not only onGet, onPost, etc. as in servlets

@RequestMapping("url1.htm")
public String loadAnyJsp(@ModelAttribute Login login) {
    return "path/to/my/views/login";
}

@RequestMapping("url2.htm")
public String redirectToAnotherController(@ModelAttribute Login login) {
    return "redirect:url1.htm";
}
JSP的路径在web.xml文件中指定,例如:

...
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:favorPathExtension="true" p:favorParameter="true" p:ignoreAcceptHeader="true" p:defaultContentType="text/html">
    <description>Depending on extension, return html with no decoration (.html), json (.json) or xml (.xml), remaining pages are decoracted</description>
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml" />
            <entry key="json" value="application/json" />
            <entry key="html" value="text/html" />
            <entry key="action" value="text/html" />
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView" p:marshaller-ref="xstreamMarshaller" />
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        </list>
    </property>
    <property name="viewResolvers">
        <list>
            <bean id="nameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
                <description>Maps a logical view name to a View instance configured as a Spring bean</description>
            </bean>
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
        </list>
    </property>
</bean>
...
。。。
根据扩展名的不同,返回不带修饰(.html)、json(.json)或xml(.xml)的html,其余页面将被解压缩
将逻辑视图名称映射到配置为Springbean的视图实例
...

您应该阅读以获取更多信息(参见16.5解析视图)。

哪一行引发异常?字符串userName=((Login)命令)。getUserName();字符串密码=((登录)命令).getPassword();这两行我执行了一个cast:Login Login=(Login)命令;还有同样的错误这是我的应用程序servlet:好的,这是有效的,但是你能告诉我原因吗?我不明白登录类是如何获得用户输入的值的。这对我来说是抽象的,我犯了很多错误,因为我不明白POJO是如何设置为用户输入的值的。请给我解释一下。是的,它确实有效,但是,当谈到理解pojo是如何从用户界面设置值时,我迷茫了,我知道会发生这种情况,但我想我需要一个关于spring是如何实现的解释。好的,很好的解释,我现在理解得更清楚了。还有一个小问题,你能告诉我何时使用ModelAndView HandlerRequest吗(HttpServletRequest,HttpServletResponse-response)方法。我在其他应用程序中使用了此方法来处理用户的帖子“now I see spring使用了onGet(@ModelAttribute)@dev_-darin查看新的编辑。我解释的方式非常常见,使开发更容易。
// the methods can have the name you want
// not only onGet, onPost, etc. as in servlets

@RequestMapping("url1.htm")
public String loadAnyJsp(@ModelAttribute Login login) {
    return "path/to/my/views/login";
}

@RequestMapping("url2.htm")
public String redirectToAnotherController(@ModelAttribute Login login) {
    return "redirect:url1.htm";
}
...
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:favorPathExtension="true" p:favorParameter="true" p:ignoreAcceptHeader="true" p:defaultContentType="text/html">
    <description>Depending on extension, return html with no decoration (.html), json (.json) or xml (.xml), remaining pages are decoracted</description>
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml" />
            <entry key="json" value="application/json" />
            <entry key="html" value="text/html" />
            <entry key="action" value="text/html" />
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView" p:marshaller-ref="xstreamMarshaller" />
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        </list>
    </property>
    <property name="viewResolvers">
        <list>
            <bean id="nameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
                <description>Maps a logical view name to a View instance configured as a Spring bean</description>
            </bean>
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
        </list>
    </property>
</bean>
...