2012-01-16 17 views
0

私はSpring 3で検証フォームを作成しています。私の問題は、検証フォームで多くの例が見られたことです。私は1つ作成しました。エラーがある場合でも、私のフォームは "result.hasErrors()"メソッドを渡します。Spring 3を使用した検証フォーム

私のコードは次のとおりです。

コントローラー:

package com.esb.sso; 

import java.io.*; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 

import javax.servlet.http.*; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.validation.BindingResult; 
import java.util.Map; 

import javax.validation.Valid; 

import com.esb.sso.form.LoginForm; 
import javax.servlet.http.HttpServletRequest; 

/** 
* Handles requests for the application home page. 
*/ 
@Controller 
@RequestMapping(value = "/") 
public class HomeController { 

LoginForm loginForm = new LoginForm(); 

     model.put("loginForm", loginForm); 

     return "home"; 
    } 


@RequestMapping(method = RequestMethod.POST) 
public String validation(@Valid LoginForm loginForm, BindingResult result, 
     Map model) throws IOException { 

    logger.info("Login POST var"); 

    logger.info(loginForm.getLogin()); 
    logger.info(loginForm.getPassword()); 

    if (result.hasErrors()) { 
     logger.info("error"); 
     return "home"; 
    } 

    model.put("loginForm", loginForm); 

    return "logged"; 

} 

} 

バリ:

パッケージcom.esb.sso.form。

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 

public class LoginForm { 

    @NotNull(message = "notNull") 
    @Size(min=1, max=50, message="mote charters") 
    private String login; 

    @NotNull(message = "notNull") 
    @Size(min=1, max=50, message="mote charters") 
    private String password; 

    public void setLogin(String login){ 
     this.login = login; 
    } 

    public String getLogin(){ 
     return login; 
    } 

    public void setPassword(String password){ 
     this.password = password; 
    } 

    public String getPassword(){ 
     return password; 
    } 


} 

ビュー:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<html> 
<head> 
    <title>Home</title> 
</head> 
<body> 
Autoryzacja!!! 
<form:form action="" commandName="loginForm"> 

<table> 

<tr> 

<td>User Name:<FONT color="red"><form:errors path="login" /></FONT></td> 

</tr> 

<tr> 

<td><form:input path="login" /></td> 

</tr> 

<tr> 

<td>Password:<FONT color="red"><form:errors path="password" /></FONT></td> 

</tr> 

<tr> 

<td><form:password path="password" /></td> 

</tr> 

<tr> 

<td><input type="submit" value="Submit" /></td> 

</tr> 

</table> 

</form:form> 
</body> 
</html> 

のweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 

    <!-- Creates the Spring Container shared by all Servlets and Filters --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Processes application requests --> 
    <servlet> 
     <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>appServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

サーブレット・コンテキスト:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <context:component-scan base-package="com.esb.sso" /> 

    <beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <beans:property name="basename" value="/WEB-INF/messages" /> 
    </beans:bean> 

</beans:beans> 

とmessages.properties:

NotNull.loginForm.login=must not be blank. 
NotNull.loginForm.password=must not be blank. 
Size.loginForm.login=Login size must be between 1 and 50 charters. 
Size.loginForm.password=Password size must be between 1 and 50 charters. 

問題が

Coul'd enybodyヘルプここで私は知りません私?

答えて

0

"/"マッピングメソッドのHomeController-getメソッドのコピー貼り付けエラーを想定します。

質問に答えるには - BindingResultで検証をバインドするには、LoginFormオブジェクトをモデル属性として指定する必要があります。以下はdocumentation

+0

を参照してください参考のために正しいコード

public String validation((@ModelAttribute("loginForm") @Valid LoginForm loginForm, BindingResult result, Map model) throws IOException { 

である私は@ModelAttributeを追加しましたが、これは何も変わっていません。私はまだ正しい検証がありません。 :( – Ilkar

+0

'form:input'タグが空の値を送信しているため、実際には 'Html:あなたが入力を指定していないときに文字列を渡すと、@ NotNullの検証が行われます。 –

+0

この変更は何もしませんでした。私のプロジェクトは 'http://www.roseindia.net/tutorial/spring/spring3/web/spring-3-mvc -validation-example.html '。私はその例をダウンロードすると、正しい動作します。しかし、自分自身でビルドしようとすると、またはその例から新しいプロジェクトにファイルをコピーすると、フォームは検証されません。検証は機能していません。すべてのフォームは検証によって渡されます。 – Ilkar

関連する問題