2016-04-15 16 views
0

jsp Spring MVC-No xml Konfiguration zu umleiten ich Feder bin mit 4.2.2 daher auch keine XML-Konfiguration pom.xml mitnicht in der Lage

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.hyundai</groupId> 
    <artifactId>carworkshop</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>carworkshop Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
<properties> 
     <jdk.version>1.7</jdk.version> 
     <spring.version>4.2.2.RELEASE</spring.version> 
     <jackson.version>2.6.3</jackson.version> 
     <logback.version>1.1.3</logback.version> 
     <jcl.slf4j.version>1.7.12</jcl.slf4j.version> 
     <jstl.version>1.2</jstl.version> 
     <servletapi.version>3.1.0</servletapi.version> 
     <hibernate.version>4.2.0.Final</hibernate.version> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- Need this for json to/from object --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <!-- JSTL for views --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>${jstl.version}</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${jcl.slf4j.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>${logback.version}</version> 
     </dependency> 

     <!-- compile only, deployed container will provide this --> 
     <!-- Need this for config annotation --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>${servletapi.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <!-- Hibe dependencies added by dev team --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <!-- Added for spring transaction --> 
     <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-tx</artifactId> 
    <version>${spring.version}</version> 
</dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>${jdk.version}</source> 
        <target>${jdk.version}</target> 
       </configuration> 
      </plugin> 



      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.6</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 

</project> 

AppInitializer Klasse

package com.hyundai.initilaizer; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

import com.hyundai.config.AppWebConfig; 



public class AppInitializer extends 
     AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] { AppWebConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return null; 
    } 

} 

AppWebConfig Klasse

package com.hyundai.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@EnableWebMvc 
@Configuration 
@ComponentScan({ "com.hyundai.web" }) 
public class AppWebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Bean 
    public InternalResourceViewResolver viewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/views/jsp/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 

} 

welcome.jsp

<%@page session="false"%> 
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title>Spring MVC 4 + Ajax Hello World</title> 

<c:url var="home" value="/" scope="request" /> 

<spring:url value="/resources/core/css/hello.css" var="coreCss" /> 
<spring:url value="/resources/core/css/bootstrap.min.css" 
    var="bootstrapCss" /> 
<link href="${bootstrapCss}" rel="stylesheet" /> 
<link href="${coreCss}" rel="stylesheet" /> 

<spring:url value="/resources/core/js/jquery.1.10.2.min.js" 
    var="jqueryJs" /> 
<script src="${jqueryJs}"></script> 
</head> 

<nav class="navbar navbar-inverse"> 
    <div class="container"> 
     <div class="navbar-header"> 
      <a class="navbar-brand" href="#">CarWorkshop</a> 
     </div> 
    </div> 
</nav> 

<div class="container" style="min-height: 500px"> 

    <div class="starter-template"> 
     <h1>Search Form</h1> 
     <br> 

     <div id="feedback"></div> 

     <form class="form-horizontal" id="search-form"> 
      <div class="form-group form-group-lg"> 
       <label class="col-sm-2 control-label">VehicleRegNo</label> 
       <div class="col-sm-10"> 
        <input type=text class="form-control" id="vehicleRegNo"> 
       </div> 
      </div> 
      <div class="form-group form-group-lg"> 
       <label class="col-sm-2 control-label">JobDate</label> 
       <div class="col-sm-10"> 
        <input type="text" class="form-control" id="jobDate"> 
       </div> 
      </div> 

      <div class="form-group"> 
       <div class="col-sm-offset-2 col-sm-10"> 
        <button type="submit" id="bth-search" 
         class="btn btn-primary btn-lg">Search</button> 
       </div> 
      </div> 
     </form> 

    </div> 

</div> 

<div class="container"> 
    <footer> 
     <p> 
      &copy; <a href="http://www.tcs.com">Mkyong.com</a> 2015 
     </p> 
    </footer> 
</div> 

<script> 
    jQuery(document).ready(function($) { 

     $("#search-form").submit(function(event) { 

      // Disble the search button 
      enableSearchButton(false); 

      // Prevent the form from submitting via the browser. 
      event.preventDefault(); 

      searchViaAjax(); 

     }); 

    }); 

    function searchViaAjax() { 

     var search = {} 
     search["vehicleRegNo"] = $("#vehicleRegNo").val(); 
     search["jobDate"] = $("#jobDate").val(); 

     $.ajax({ 
      type : "POST", 
      contentType : "application/json", 
      url : "${home}search/api/getSearchResult", 
      data : JSON.stringify(search), 
      dataType : 'json', 
      timeout : 100000, 
      success : function(data) { 
       console.log("SUCCESS: ", data); 
       display(data); 
      }, 
      error : function(e) { 
       console.log("ERROR: ", e); 
       display(e); 
      }, 
      done : function(e) { 
       console.log("DONE"); 
       enableSearchButton(true); 
      } 
     }); 

    } 

    function enableSearchButton(flag) { 
     $("#btn-search").prop("disabled", flag); 
    } 

    function display(data) { 
     var json = "<h4>Ajax Response</h4><pre>" 
       + JSON.stringify(data, null, 4) + "</pre>"; 
     $('#feedback').html(json); 
    } 
</script> 

</body> 
</html> 

AjaxController.java

package com.hyundai.web.controller; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import javax.annotation.PostConstruct; 

import org.springframework.util.StringUtils; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

import com.fasterxml.jackson.annotation.JsonView; 
import com.hyundai.web.entity.AjaxResponseBody; 
import com.hyundai.web.entity.Employee; 
import com.hyundai.web.entity.Job; 
import com.hyundai.web.entity.Jobline; 
import com.hyundai.web.entity.SearchCriteria; 
import com.hyundai.web.entity.Task; 
import com.hyundai.web.jsonview.Views; 

@RestController 
public class AjaxController { 

    List<Job> jobs; 

    // @ResponseBody, not necessary, since class is annotated with @RestController 
    // @RequestBody - Convert the json data into object (SearchCriteria) mapped by field name. 
    // @JsonView(Views.Public.class) - Optional, limited the json data display to client. 
    @JsonView(Views.Public.class) 
    @RequestMapping(value = "/search/api/getSearchResult") 
    public AjaxResponseBody getSearchResultViaAjax(@RequestBody SearchCriteria search) { 

     AjaxResponseBody result = new AjaxResponseBody(); 

     if (isValidSearchCriteria(search)) { 
      List<Job> jobs = findByVehRegOrJobDt(search.getVehRegNo(), search.getJobDate()); 

      if (jobs.size() > 0) { 
       result.setCode("200"); 
       result.setMsg(""); 
       result.setResult(jobs); 
      } else { 
       result.setCode("204"); 
       result.setMsg("No jobs!"); 
      } 

     } else { 
      result.setCode("400"); 
      result.setMsg("Search criteria is empty!"); 
     } 

     //AjaxResponseBody will be converted into json format and send back to client. 
     return result; 

    } 

    private boolean isValidSearchCriteria(SearchCriteria search) { 

     boolean valid = true; 

     if (search == null) { 
      valid = false; 
     } 

     if (StringUtils.isEmpty(search.getVehRegNo())){ 
      valid = false; 
     } 

     return valid; 
    } 

    // Init some users for testing 
    @PostConstruct 
    private void iniDataForTesting() { 

     Task task1 =new Task(); 
     task1.setTaskName("painting"); 

     Task task2 =new Task(); 
     task2.setTaskName("mechanical"); 

     Jobline jobline1 = new Jobline(); 
     jobline1.setId(1); 
     jobline1.setTask(task1); 

     Jobline jobline2 = new Jobline(); 
     jobline2.setId(2); 
     jobline2.setTask(task2); 

     Set<Jobline> jobLineSet = new HashSet<Jobline>(); 
     jobLineSet.add(jobline1); 
     jobLineSet.add(jobline2); 


     Employee emp1 = new Employee(); 
     emp1.setEmpName("John"); 


     Job job1 =new Job(1, emp1, "or02av7434", new Date(), 
       jobLineSet); 

     Job job2 =new Job(2, emp1, "or02bz9000", new Date(), 
       jobLineSet); 

     Job job3 =new Job(3, emp1, "or02bk5630", new Date(), 
       jobLineSet); 



     jobs = new ArrayList<Job>(); 
     jobs.add(job1); 
     jobs.add(job2); 
     jobs.add(job3); 

    } 

    // Simulate the search function 
    private List<Job> findByVehRegOrJobDt(String vehRegno, String providedDate) { 

     List<Job> result = new ArrayList<Job>(); 

     for (Job job : jobs) { 

      if ((!StringUtils.isEmpty(vehRegno)) && (!StringUtils.isEmpty(vehRegno))) { 

       if (vehRegno.equals(job.getVehRegNo()) && providedDate.equals(job.getJobDate())) { 
        result.add(job); 
        continue; 
       } else { 
        continue; 
       } 

      } 
      if (!StringUtils.isEmpty(vehRegno)) { 
       if (vehRegno.equals(job.getVehRegNo())) { 
        result.add(job); 
        continue; 
       } 
      } 


     } 

     return result; 

    } 
} 

, wenn ich das obige Projekt bereitstellen und schlagen http://localhost:8080/carworkshop. Es braucht mich nicht zu begrüßen. Bitte hilf mir, wo ich falsch liege. Grundsätzlich möchte ich eine einfache Anwendung mit Federmvc 4.2.2, Ajax und Jquery schreiben. wo ich von Root-Kontext auf welcome.jsp, Seite weitergeleitet werde und ich werde einige grundlegende Suchoperation

Antwort

1

Es ist wie Sie fehlende Ansicht Controller sind. Sie versuchen, die Ansicht mithilfe von Servlets aufzulösen. Ich bin mir nicht sicher, ob die richtige Ansatz ..

Im Frühjahr mvc erfolgt mit @Controller Annotation und @RequestMapping, dh:

@Controller 
public class WebController { 

    @RequestMapping(value = "/") 
    public String signin() { 
    return "signin"; //directs to your /WEB-INF/views/jsp/signin.jsp 
    } 
} 

this Github-Projekt dient als gutes und schnelles Federreferenzprojekt

0

Sie haben einen RestController für die Verarbeitung Ihrer JSON-Endpunktanforderungen bereitgestellt, aber Sie benötigen auch einen @Controller (beachten Sie nicht @RestController) für die Verarbeitung der Bereitstellung Ihrer Willkommens-JSP.

@Controller 
public class WelcomeController { 

    @RequestMapping(value = "/") 
    public String welcome() { 
    return "Welcome"; //will resolve to /WEB-INF/views/jsp/Welcome.jsp 
    } 
} 

Jedes Mal, wenn Sie JSP gemacht Inhalte dienen wollen, sollten Sie eine MVC-Controller definiert haben, um diese Anforderungen zu verarbeiten.

+0

10 Haben Sie schon das in meinem Code Paket com.hyundai.web.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class WelcomeController { \t @RequestMapping (value = "/", method = RequestMethod.GET) \t public String printWelcome (ModelMap Modell) { \t \t return "welcome"; \t} } –

+0

Sie versuchen auf/carworkshop zuzugreifen. Soll das der Kontextstamm der Anwendung oder die tatsächliche URL-Zuordnung sein, an die Ihre welcome.jsp zurückgegeben werden soll? Wenn es das Kontextstammverzeichnis ist, wo haben Sie das in der Konfiguration definiert?Wenn Sie möchten, dass/carworkshop das welcome.jsp zurückgibt, müssen Sie Ihre Anforderungszuordnung zu '@RequestMapping (value ="/carworkshop ") ändern' – alexanderific

+0

wo den Kontextstamm in der Konfiguration definieren? –