2012-06-19 14 views
5

मैं HibernateValidator का उपयोग कर वसंत और हाइबरनेट के साथ जेएसपी में एक साधारण रूप को सत्यापित करने की कोशिश कर रहा हूं। जेएसपी पेज Temp.jsp निम्नानुसार है (web.xml में url pttern *.htm है)।अपवाद: "हैंडलर के लिए कोई एडाप्टर नहीं। क्या आपका हैंडलर नियंत्रक जैसे समर्थित इंटरफेस को कार्यान्वित करता है?"

<%@page contentType="text/html" pageEncoding="UTF-8" %> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 

<form:form method="post" action="Temp.htm" commandName="validationForm"> 
    <!--validationForm is a model class--> 
<table> 
    <tr> 
     <td>User Name:<font color="red"><form:errors path="userName" /></font></td> 
    </tr> 

    <tr> 
     <td><form:input path="userName" /></td> 
    </tr> 

    <tr> 
     <td>Age:<font color="red"><form:errors path="age" /></font></td> 
    </tr> 

    <tr> 
     <td><form:input path="age" /></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> 

कक्षा validationForm निम्नानुसार है।

package validators; 

import javax.validation.constraints.Max; 
import javax.validation.constraints.Min; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 
import org.hibernate.validator.constraints.NotEmpty; 
import org.springframework.format.annotation.NumberFormat; 
import org.springframework.format.annotation.NumberFormat.Style; 

final public class ValidationForm 
{ 
    @NotEmpty 
    @Size(min = 1, max = 20) 
    private String userName; 
    @NotNull 
    @NumberFormat(style = Style.NUMBER) 
    @Min(1) 
    @Max(110) 
    private Integer age; 
    @NotEmpty(message = "Password must not be blank.") 
    @Size(min = 1, max = 10, message = "Password must between 1 to 10 Characters.") 
    private String password; 

    public void setUserName(String userName) 
    { 
      this.userName = userName; 
    } 

    public String getUserName() 
    { 
      return userName; 
    } 

    public void setAge(Integer age) 
    { 
      this.age = age; 
    } 

    public Integer getAge() 
    { 
      return age; 
    } 

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

    public String getPassword() 
    { 
      return password; 
    } 
} 

और Controller वर्ग जहां सत्यापन संसाधित किया जाना चाहिए के रूप में इस प्रकार है (मैं SimpleFormController उपयोग कर रहा हूँ) है।

package controller; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.validation.BindException; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.SimpleFormController; 
import usebeans.TempService; 
import validators.ValidationForm; 

@SuppressWarnings("deprecation") 
final public class Temp extends SimpleFormController 
{ 
    private TempService tempService=null; 
    public Temp() 
    { 
     //setCommandClass(Temp.class); 
     //setSuccessView("Temp"); 
     //setFormView("Temp"); 

     setCommandClass(ValidationForm.class); //Still not working. 
     setCommandName("validationForm"); 
    } 

    public void setTempService(TempService tempService) 
    { 
     this.tempService = tempService; 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception 
    { 
     ModelAndView mv=new ModelAndView(); 
     ValidationForm validationForm=(ValidationForm) command; 
     tempService.add(validationForm); 
     return mv; 
    } 

    @Override 
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception 
    { 
     ModelAndView mv=new ModelAndView(); 
     return mv; 
    } 
} 

dispatcher-servlet में, मैं निम्नलिखित जोड़ लिया है।

<bean id="tempService" class="usebeans.TempServiceImpl" /> 
<bean name="/Temp.htm" class="controller.Temp" p:tempService-ref="tempService" p:formView="Temp" p:successView="Temp" /> 

इसके अलावा जोड़ने निम्नलिखित सेम अभी भी वहाँ कोई किस्मत है की कोशिश की।

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 

कहाँ TempService इंटरफेस के रूप में है इस प्रकार है।

package usebeans; 

import validators.ValidationForm; 

public interface TempService 
{ 
    public void add(ValidationForm validationForm); 
} 

और निम्नलिखित TempServiceImpl कक्षा है।

package usebeans; 

import validators.ValidationForm; 

final public class TempServiceImpl implements TempService 
{ 
    public void add(ValidationForm validationForm) 
    { 
     System.out.println("Message"); 
    } 
} 

हालांकि वर्ग TempServiceImplTempService इंटरफ़ेस लागू करता है, मैं निम्न अपवाद हो रही है।

javax.servlet.ServletException: No adapter for handler [[email protected]]: Does your handler implement a supported interface like Controller? 
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:982) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:770) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) 
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) 
at java.lang.Thread.run(Thread.java:619) 

संपादित करें:

हालांकि मेरा अनुसरण कर क्या here समझाया गया है, समस्या बनी हुई है और मैं जैसा कि ऊपर उल्लेख एक ही अपवाद हो रही है। मैं यहां किस कॉन्फ़िगरेशन सेटिंग्स को याद कर रहा हूं। यह dispatcher-servlet.xml फ़ाइल में हो सकता है। इस प्रकार संपूर्ण dispatcher-servlet.xml फ़ाइल निम्नानुसार है।

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" 

     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 

     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

     <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>  
     <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> 


     <bean id="tempService" class="usebeans.TempServiceImpl" /> 
     <bean name="/Temp.htm" class="controller.Temp" p:tempService-ref="tempService" p:formView="Temp" p:successView="Temp" /> 


     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
      <property name="mappings"> 
       <props> 
        <prop key="index.htm">indexController</prop>     
        <prop key="Temp.htm">tempService</prop>     
       </props> 
      </property> 
     </bean> 

     <bean id="viewResolver" 
       class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
       p:prefix="/WEB-INF/jsp/" 
       p:suffix=".jsp" /> 


     //The index controller. 

     <bean name="indexController" 
       class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
       p:viewName="index" /> 

</beans> 

मेरे पास उस अपवाद को फेंकने के बारे में कोई सटीक विचार नहीं है। क्या आप इसे समझ सकते हैं कि अपवाद क्यों फेंक दिया जा रहा है? मैं किस कॉन्फ़िगरेशन सेटिंग्स या कुछ और याद कर रहा हूं?

+0

नीचे के रूप में वर्ग Temp बदलने जो वसंत के संस्करण का उपयोग किया जाता है? –

+0

वसंत संस्करण '3.0.2' – Tiny

+0

है क्या आप वाकई 'ControllerClassNameHandlerMapping' का उपयोग करना चाहते हैं? क्या आप इस बीन को हटा सकते हैं और एक बार कोशिश कर सकते हैं? –

उत्तर

1

मैं इस मुद्दे को ठीक करने के लिए नए एक्सएमएल

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 

    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <bean 
     class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> 
    <bean 
     class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> 


    <bean id="tempService" class="usebeans.TempServiceImpl" /> 
    <bean id="tempController" class="controller.Temp"/> 


    <bean id="urlMapping" 
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="index.htm">indexController</prop> 
       <prop key="Temp.htm">tempController</prop> <!-- You need to mapp the url to the controller bean--> 
      </props> 
     </property> 
    </bean> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

    <bean name="indexController" 
     class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
     p:viewName="index" /> 

</beans> 

फिक्स <prop key="Temp.htm">tempController</prop> से संबंधित था प्राप्त करें।

दूसरा त्रुटि के लिए

package controller; 

import java.util.HashMap; 
import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.validation.BindException; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.SimpleFormController; 
import usebeans.TempService; 
import validators.ValidationForm; 

@SuppressWarnings("deprecation") 
final public class Temp extends SimpleFormController { 
    private TempService tempService = null; 

    public Temp() { 
     // setCommandClass(Temp.class); 
     // setSuccessView("Temp"); 
     // setFormView("Temp"); 

     setCommandClass(ValidationForm.class); // Still not working. 
     setCommandName("validationForm"); 
    } 

    public void setTempService(TempService tempService) { 
     this.tempService = tempService; 
    } 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, 
      HttpServletResponse response, Object command, BindException errors) 
      throws Exception { 
     ModelAndView mv = new ModelAndView(); 
     ValidationForm validationForm = (ValidationForm) command; 
     tempService.add(validationForm); 
     return mv; 
    } 

    @Override 
    protected ModelAndView showForm(HttpServletRequest request, 
      HttpServletResponse response, BindException errors) 
      throws Exception { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     model.put(getCommandName(), new ValidationForm()); 
     ModelAndView mv = new ModelAndView("Temp", model); 
     return mv; 
    } 
} 
+0

फिर यह एक नया अपवाद फेंकता है 'java.lang.IllegalStateException: न तो बाइंडिंग रीसेट और न ही सादा लक्ष्य ऑब्जेक्ट बीन नाम' सत्यापन के लिए 'अनुरोध विशेषता के रूप में उपलब्ध' का अर्थ है कि * कमांड ऑब्जेक्ट * नियंत्रक के लिए उपलब्ध नहीं है। (जेएसपी पृष्ठ 'सत्यापनकरण' वर्ग से बंधे नहीं है)। – Tiny

+0

मैं 'Temp' नियंत्रक वर्ग वास्तव में संशोधित रूप में के रूप में आप का उल्लेख किया लेकिन दुर्भाग्य से यह के रूप में पिछले टिप्पणी में उल्लेख किया है एक ही अपवाद फेंक रहा है। हालांकि जवाब बहुत करीब हो सकता है। – Tiny

+0

मैं jsp इस्तेमाल नहीं किया है ... इसलिए मुझे नहीं लगता कि मैं बाँध त्रुटि समस्या के साथ मदद कर सकता है ... लेकिन अगर आप इस लिंक http://www.springbyexample.org/examples/spring-web- उल्लेख कर सकते हैं प्रवाह-सबफ्लो-वेबएप-जेएसपी-example.html यह देखने के लिए कि यह कैसे किया जा सकता है। –

संबंधित मुद्दे