Spring MVC - базовый вопрос - PullRequest
0 голосов
/ 10 января 2011

Я новичок в Spring MVC.Я получаю сообщения об ошибках по следующим вопросам (пока не уверен, какой объем информации мне необходим):

Работает нормально:

 @RequestMapping(value = "startpage.do")
 public ModelAndView startpage(HttpServletRequest req, HttpServletResponse res) {
.
.
  ModelAndView mv = new ModelAndView("startpage");
  mv.getModelMap().addAttribute("loginPage", loginPage);
  return mv;

Но не удается:

         @RequestMapping(value = "somecontroller.do")
 public ModelAndView ftcontroller(HttpServletRequest req, HttpServletResponse res, ModelAndView mav) {.. ...
   ModelAndView mv = new ModelAndView("startpage");
      mv.getModelMap().addAttribute("loginPage", loginPage);
  return mav;

Как видите, один и тот же код, другое отображение запроса.Может ли быть так, что это потребляет MVC, чтобы запутаться?

Ошибка, которую я получаю:

  java.lang.NullPointerException
 at jsp_servlet._web_45_inf._jsp.__somecontroller._jspService(__ftcontroller.java:103)
 at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
 at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
 at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
 Truncated. see log file for complete stacktrace

Логика biz - это экран входа в систему "startpage.do", когдаВход в систему отправлен, он может не работать (в этом случае startup.do должен быть повторно выполнен, в противном случае должна быть возвращена другая страница.

, если есть лучший способ реализовать это, я будубудьте счастливы услышать это.

(Следует отметить, что я пытаюсь подключить Spring MVC к существующему проекту, поэтому я стараюсь вносить как можно меньше изменений и, следовательно, не использоватьвесна: форма и т. д.)

Дополнительная информация:

  1. Файл JSP startpage.jsp (разрешен из "стартовой страницы") имеет форму с target = "somecontroller.do".

  2. Полный код контроллера:

    class
    {public static void main (String [] args) {

    @RequestMapping(value = "startpage.do")
    public ModelAndView startpage(HttpServletRequest req, HttpServletResponse res) {
        System.out.println(">>>>>>HomeController: Passing through (Get Type)...");
        LoginPage loginPage = new LoginPage();
        ModelAndView mv = new ModelAndView("startpage");
        mv.getModelMap().addAttribute("loginPage", loginPage);
        return mv;
    }
    
    @RequestMapping(value = "somecontroller.do")
    public ModelAndView ftcontroller(HttpServletRequest req, HttpServletResponse res)
            throws Exception {
    
        // Parsing for login request;
        String sUsername = req.getParameter(USER_ID);
        String sUserPassword = req.getParameter(PASSWORD);
        AbstractResponseDataComponent returnedResponse = new LoginCommand().login(sUsername, sUserPassword);
    
        String returnedView = GlobalConstants.EMPTY_STRING;
        JstlView view = new JstlView();
        Map model = new HashMap();
        if (returnedResponse.isSuccessful()) 
        {
            view.setUrl("somecontroller");
            model.put("loginResponse", (LoginResponse) returnedResponse);
    
        } else 
        {
            view.setUrl("startpage");
            model.put("loginPage", (LoginPage) returnedResponse);
        }
        return new ModelAndView(view, model);
    
    }
    }
    

    }

Ответы [ 3 ]

1 голос
/ 10 января 2011

Кстати: при использовании Spring 3.0 сделайте подпись вашего метода более чистой:

вместо

public ModelAndView ftcontroller(HttpServletRequest req, HttpServletResponse res)
    throws Exception {
  String sUsername = req.getParameter(USER_ID);
  String sUserPassword = req.getParameter(PASSWORD);
...

сделай это весной 3.0 способом:

public ModelAndView ftcontroller(
   @RequestParam(USER_ID) String sUsername, 
   @RequestParam(PASSWORD) String sUserPassword)
    throws Exception {

...
1 голос
/ 10 января 2011

На ваш второй вопрос:

если есть лучший способ реализации это, я буду рад это услышать.

Вы ищете что-то вроде этого:

@RequestMapping(value = "startpage.do")
public String startpage() {
    ...    
    if (loginFailed) {
       return "redirect:startpage.do");
    } else {
       return "redirect:somecontroller.do");
    }
}

(Я предпочитаю перенаправления, потому что я предполагаю, что методы входа в систему имеют некоторые побочные эффекты.)

0 голосов
/ 10 января 2011

Я полагаю, что причиной вашего исключения является JstlView.

Старайтесь не использовать прямой JstlView, вместо этого передавайте имя представления как String.

final String viewName;
Map model = new HashMap();
if (returnedResponse.isSuccessful()) 
{
    viewName = "somecontroller";
    model.put("loginResponse", (LoginResponse) returnedResponse);

} else 
{
    viewName = "startpage";
    model.put("loginPage", (LoginPage) returnedResponse);
}
return new ModelAndView(viewName, model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...