java-Spring MVC表单输入值始终为null
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Spring MVC表单输入值始终为null,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6102字,纯文字阅读大概需要9分钟。
内容图文
![java-Spring MVC表单输入值始终为null](/upload/InfoBanner/zyjiaocheng/670/87803036ec874e2db1b02df901f45f6c.jpg)
我是Spring MVC的新手,但不是Java的Web开发的新手.我正在尝试创建一个简单的form-> controller示例.
我有一个表单,一个表单控制器(在下面粘贴的上下文XML中配置)和我的模型(一个简单的bean).提交表单时,无论如何,我的文本输入值始终为null.有任何想法吗?
表单控制器弹簧配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- controllers -->
<bean name="/home.html" class="atc.web.view.controller.HomeController" />
<!--bean name="/mirror.html" class="atc.web.view.controller.MirrorController" -->
<bean name="/url-cache.html" class="atc.web.view.controller.URLCacheFormController">
<property name="synchronizeOnSession" value="true" />
<!--property name="sessionForm" value="false"-->
<property name="commandName" value="urlForm"/>
<property name="commandClass" value="atc.web.view.model.URLBean"/>
<property name="validator">
<bean class="atc.web.view.validators.URLValidator"/>
</property>
<property name="formView" value="mirror"/>
<property name="successView" value="url-cache.html"/>
<property name="URLCachingService" ref="urlCachingService" />
</bean>
<!-- end controllers -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- custom beans -->
<bean id="breakcrumbInjectionFilter" class="atc.web.view.filter.BreadcrumbInjectionFilter">
<property name="contextPrefix" value="/home-web" />
</bean>
<!-- end custom beans -->
</beans>
包含我的表单的JSP如下:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jspf/core/taglibs.jspf" %>
<html>
<head><title>Simple tools</title></head>
<style>
.error s {
color:#FF0000;
}
</style>
<body>
<%@ include file="/WEB-INF/jspf/nav/nav.jspf" %>
Errors: <form:errors path="url" cssClass="error"/>
<form:form method="post" commandName="urlForm">
<form:input path="url" />
<input type="submit" align="center" value="Execute" />
</form:form>
</body>
</html>
这是我控制器的完整来源:
public class URLCacheFormController extends SimpleFormController {
private URLCachingService cachingService;
private static Logger log = Logger.getLogger(URLCacheFormController.class);
public ModelAndView onSubmit(Object command) throws ServletException {
log.debug(String.format("URLCachingFormController received request with object '%s'", command));
URLBean urlBean = (URLBean) command;
try {
URL url = new URL(urlBean.getUrl());
URLCache cache = cachingService.cacheURL(url);
cache.cacheToTempFile();
} catch (IOException e) {
log.error("Invalid URL...", e);
}
return new ModelAndView(new RedirectView(getSuccessView()));
}
protected Object formBackingObject(HttpServletRequest request) throws ServletException {
log.debug("formBackingObject() ");
return new URLBean();
}
public void setURLCachingService(URLCachingService cachingService) {
this.cachingService = cachingService;
}
}
以上所有内容均产生以下HTML:
<html>
<head></head>
<body>
<div><span><a href="home.html">Home </a></span><span> | <a href="url-cache.html">Page Mirror</a></span></div>
<div id="breadcrumb"><span>Your trail:<a href=""/></span></div>Attrs:<div/>
<form id="urlForm" method="post" action="/home-web/url-cache.html">
<input id="url" type="text" value="" name="url"/>
<input type="submit" align="center" value="Execute"/>
</form>
</body>
</html>
我现在正在重写doSubmitAction(Object command),但是我仍然没有点击该方法.表单提交,但是接下来我要知道的是空白表单(在调用formBackingObject(HttpServletRequest request)之后).
也就是说,当我提交时,永远不会执行表单控制器中doSubmitAction的第1行的日志记录调用.验证程序执行并失败(正确添加错误消息),因为它检查的值始终为null(或者正确放置,从不设置).但是,总是对formBackingObject进行调用.我的表单的请求属性(表单输入“ url”)始终为null.
更新:好的,因此在按照serg555的建议进行了一些认真的调试之后,并删除了验证,我可以确认问题似乎在于将请求参数(例如来自表单的’url’的值)映射到我的命令/ bean;即,从未在我的bean上设置URL,或者正在重新创建bean.
请帮忙?
解决方法:
我不知道问题出在哪里,让我告诉我我的控制器有效,也许您将能够找出问题所在:
public class TestController extends SimpleFormController {
public TestController () {
setFormView("testView");
setSuccessView("testView");
setCommandClass(TestCmd.class);
setCommandName("cmd");
}
protected Object formBackingObject(HttpServletRequest request)throws Exception {
Object o = super.formBackingObject(request);
TestCmd cmd = (TestCmd) o;
return cmd;
}
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object obj, BindException errors) throws Exception {
TestCmd cmd = (TestCmd) obj;
log.debug("test value = " + cmd.getTestValue());
return super.onSubmit(request, response, obj, errors);
}
}
形成:
<form method="post" action="/test.html">
<form:input path="cmd.testValue"/>
<input type="submit">
</form>
在App-servlet.xml内部:
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
<property name="mappings">
<props>
<prop key="/test.html">testController</prop>
</props>
</property>
</bean>
<bean id="testController"
class="com.sample.TestController">
<property name="synchronizeOnSession" value="true" />
<property name="validator">
<bean class="com.sample.TestValidator"/>
</property>
</bean>
验证器:
public class TestValidator implements Validator {
public boolean supports(Class clazz) {
return (TestCmd.class.equals(clazz));
}
public void validate(Object obj, Errors errors) {
TestCmd cmd = (TestCmd) obj;
if (obj == null) {
// nothing
} else {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "testValue", null, "<b>Value</b> is required");
}
}
}
命令:
public class TestCmd {
private String testValue;
public TestCmd() {
}
public String getTestValue() {
return testValue;
}
public void setTestValue(String testValue) {
this.testValue = testValue;
}
}
内容总结
以上是互联网集市为您收集整理的java-Spring MVC表单输入值始终为null全部内容,希望文章能够帮你解决java-Spring MVC表单输入值始终为null所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。