Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Command Object и аннотации


Автор: sith 27.9.2008, 15:40
... такой вопрос... 
...я использую Spring MVC  с SpringSource Application Server, в своем приложении, web.xml не использую.. все контексты за меня поидеи поднимает сервер... опять же собсвенно ручно Dispatcher Servlet и производные xml конфижники я не использую... простые контроллеры работают... нормально... у меня проблема заключаеться в том как замапить параметры формы сразу на обьект... у меня есть следующее... сам бин с одним полем... которое нужно замапить... форма ... контроллер...
... вот контроллер...

Код

@Controller("/sayHello.do")
public class FormController {

    @RequestMapping(method=RequestMethod.GET)
    public void say(@ModelAttribute("messageCommand") MessageCommand mc,Errors errors, ModelMap map) {
        if(errors.hasErrors()){
            map.addAttribute("say", "error");
        }
        map.addAttribute("say", mc.getName());
    }
    
}


вот форма...

Код

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form  action="/sayHello.do" commandName="messageCommand">
    <form:input path="name" />
    <input type="submit" value="say hello" />
</form:form>


</body>
</html>



при вызове самой формы получаю ошибку в браузере

Код

type:    Exception report
description:    The server encountered an internal error () that prevented it from fulfilling this request.
exception:    org.apache.jasper.JasperException: An exception occurred processing JSP page /simpleForm.jsp at line 12

9: <title>Insert title here</title>
10: </head>
11: <body>
12: <form:form  action="/sayHello.do" commandName="messageCommand">
13:    <form:input path="name" />
14:    <input type="submit" value="say hello" />
15: </form:form>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause:    java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
    org.springframework.web.servlet.support.RequestContextUtils.getWebApplicationContext(RequestContextUtils.java:84)
    org.springframework.web.servlet.support.RequestContext.initContext(RequestContext.java:211)
    org.springframework.web.servlet.support.JspAwareRequestContext.initContext(JspAwareRequestContext.java:76)
    org.springframework.web.servlet.support.JspAwareRequestContext.<init>(JspAwareRequestContext.java:50)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:74)
    org.apache.jsp.simpleForm_jsp._jspx_meth_form_005fform_005f0(simpleForm_jsp.java:103)
    org.apache.jsp.simpleForm_jsp._jspService(simpleForm_jsp.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note:    The full stack trace of the root cause is available in the SpringSource Application Platform logs.



... может кто то сталкивался с такой проблемой... или как вообще решить такую задачу когда контроллеры с анотациями и нигде не прописываються

Автор: v2v 28.9.2008, 20:13
в общем случае регистрируется в web.xml слушатель:
Код

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener>

а вот как в твоём случае быть ... 
есть какие то общедоступные доки по твоему серверу? интересно почитать...

Автор: sith 28.9.2008, 22:49
да доки есть... на сайте www.springsource.com можно зарегиться и скачать бета версию сервера... плюс почитать маны... но маны достаточно скудные... и эту проблему они не освещают... в основном я не нашел... плюс мне кажеться что проблема не в самом сервере а не посредственно в конфигруации SpringMVC...

да я добавил слушатель в свой web.xml ...  и трансформировал немного страницу и контроллер... теперь все выглядет так... ну и ошибка у меня сейчас другая.... smile


Код

@Controller
@RequestMapping("/sayHello.do")
public class FormController {
    
    @RequestMapping(method=RequestMethod.POST)
    public void say(@ModelAttribute("messageCommand") MessageCommand mc,BindingResult errors, ModelMap map) {
        if(errors.hasErrors()){
            map.addAttribute("say", "error");
        }
        map.addAttribute("say", mc.getName());
    }
    
}


форма в jsp
Код

<form:form   method="POST" modelAttribute="messageCommand">
    <form:input path="name" />
    <input type="submit" value="say hello" />
</form:form>



 и ошибка 
Код

org.apache.jasper.JasperException: An exception occurred processing JSP page /simpleForm.jsp at line 13

10: </head>
11: <body>
12: <form:form action="/sayHello.do"  method="POST" modelAttribute="messageCommand">
13:    <form:input path="name" />
14:    <input type="submit" value="say hello" />
15: </form:form>
16: 


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause:    java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'messageCommand' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:172)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:192)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:158)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:145)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:136)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:120)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:379)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:139)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:90)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77)
    org.apache.jsp.simpleForm_jsp._jspx_meth_form_005finput_005f0(simpleForm_jsp.java:145)
    org.apache.jsp.simpleForm_jsp._jspx_meth_form_005fform_005f0(simpleForm_jsp.java:110)
    org.apache.jsp.simpleForm_jsp._jspService(simpleForm_jsp.java:70)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


может с этой проблемой сталкивались

Автор: v2v 28.9.2008, 23:02
Цитата(sith @  28.9.2008,  22:49 Найти цитируемый пост)
    @RequestMapping(method=RequestMethod.POST)
    public void say(@ModelAttribute("messageCommand") MessageCommand mc,BindingResult errors, ModelMap map) {

этот  метод ты используешь при создании формы или при сабмите формы?
если при сабмите, тогда покажи метод который ты используешь при создании.
Если при создании, то это не правильно :
ты в метод передаёшь ModelAttribute , а откуда  - он не существует ... он появится когда ты сделаешь сабмит с формой которая представляет MessageCommand объект.
Для создания формы тебе надо написать другой метод, например:
Код

    @RequestMapping(
            value = { "/create.do"}, 
            method = RequestMethod.GET)    
    public String setupForm(@RequestParam("id") long id, ModelMap model) {
        if (id == 0){
            model.addAttribute("messageCommand", new MessageCommand());
        } else {
            model.addAttribute("messageCommand", getMessageCommandFromDatabaseById(id));            
        }        
        return "form";
    }



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)