저는 스프링 MVC를 처음 사용하지만 Java의 웹 개발에는 새로운 것은 아닙니다. 간단한 폼 -> 컨트롤러 예제를 만들려고합니다.스프링 MVC 폼 입력 값은 항상 null입니다.
양식, 양식 컨트롤러 (아래에 붙여 넣은 컨텍스트 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 내 양식이 포함되어 같이
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;
}
}
의 모든 :
는<%@ 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>
여기 내 컨트롤러의 전체 소스입니다 위의 코드는 다음 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)
이 호출 된 후).
즉, 제출할 때 양식 컨트롤러에서
유효성 검사기는 실행중인 값이 항상 null (또는 올바르게 입력되었으므로 설정되지 않았습니다.)이므로 오류 메시지를 올바르게 실행하지 못하고 오류 메시지를 추가하지 못합니다. 그러나 doSubmitAction
의 1 번 줄에 로깅 호출이 실행되지 않습니다.
formBackingObject
에 대한 호출이 항상 발생합니다. 내 양식의 요청 속성 (양식 입력 'url')은 항상 null입니다.
업데이트 : - 같은 양식에서 'URL'의 값으로 OK, 몇 가지 심각한 디버깅 후 그래서이 문제를 확인 할 수 serg555 제안 및 검증을 제거로 요청 매개 변수를 매핑 것 같다 - 내 명령/콩; 즉, URL이 결코 내 bean에 설정되어 있지 않거나 bean이 재생성 중입니다.
도와주세요.
URL을 컨트롤러에 매핑 한 방법을 표시하지 않습니다. 앱 컨텍스트에서 그렇게 할 수 있습니까? 아마도 당신은 질문을 업데이트해서 그것을 보여 주어야 할 것입니다. – duffymo
URL 매핑은 이미 제공 한 스프링 컨텍스트 XML에서 정의됩니다. 그러나 명확성을 위해 나머지 컨텍스트 XML을 추가했습니다. –
이 질문에 대한 답변이 아니지만 이전 FormCintroller 계층 구조 대신 Spring 2.5 스타일 주석이 달린 컨트롤러를 사용하는 것이 더 쉽습니다. 상당히 간단하고 직관적입니다. – skaffman