Не удается разрешить URL контроллера из JSP - PullRequest
0 голосов
/ 06 июня 2018

В моей форме JSP среда может распознавать существование контроллера (он предлагает автозаполнение его пути), но я не могу связаться с моим контроллером.

Это может быть из-за того, что конфигурации не установлены должным образом, но всерешения здесь настраиваются с использованием xml.

Это моя форма:

<h2>Register</h2>
<!-- Contact form -->
<form class="register-form" action="/user/registerUser" method="post">
    <div class="form-group">
        <input class="form-control" name="username" placeholder="Username">
    </div>
    <div class="form-group">
        <input class="form-control" name="name" placeholder="Name">
    </div>
    <div class="form-group">
        <input class="form-control" name="lastName" placeholder="Last name">
    </div>
    <div class="form-group">
        <input class="form-control" name="email" placeholder="Email">
    </div>
    <div class="form-group">
        <input class="form-control" name="phone" placeholder="Phone number">
    </div>
    <div class="form-group">
        <input class="form-control" name="password" placeholder="Password" type="password">
    </div>
    <div class="form-group">
        <input class="form-control" name="rePassword" placeholder="Re-password" type="password">
    </div>
    <input type="submit" value="Register" class="button-transparent submit-button">
</form>

контроллер:

package app.controller;

import app.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @RequestMapping(value = "registerUser", method = RequestMethod.POST)
    public User registerUser(Model m, HttpServletRequest request) {
        System.out.println("HERE");
        return null;
    }
}

и мои классы конфигурации:

package app.config;

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

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

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

    protected String[] getServletMappings() {
        String[] init = {"/"};
        return init;
    }
}

и

package app.config;

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

@Configuration
@EnableWebMvc
@ComponentScan("app")
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

, ошибка 404, поскольку он не может распознать контроллер.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

первое, что привлекло мое внимание, это то, что ваш RequestMapping должен использовать value "/ registerUser" и возвращать некоторую страницу, а не просто null.Так что я заметил в комментариях, что это не работает для вас.Ваши настройки кажутся нормальными, но я замечаю, что вы используете getServletConfigClasses() для ваших файлов конфигурации.В моем проекте мне пришлось использовать getRootConfigClasses(), потому что у меня были некоторые проблемы, если его не было с root config.Так что, может быть, это тоже может быть вашей проблемой:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

    protected String[] getServletMappings() {
        String[] init = {"/"};
        return init;
    }
}
0 голосов
/ 06 июня 2018

вместо действия = "/ user / registerUser" try action = "$ {pageContext.request.contextPath} / user / registerUser"Дайте мне знать, вы расширение URL, например, .jsp или .html или .doПример: action = "$ {pageContext.request.contextPath} /user/registerUser.do"

...