Creating custom views in Spring MVC: the 'url' property is required

I am trying to create a simple view resolver that returns hello world no matter what kind you want (as a starting point).

I still have this:

public class MyViewResolver extends AbstractTemplateView {

    @Override
    protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request,
                                             HttpServletResponse response) throws Exception {

        doRender(model, request, response);
    }

    protected void doRender(Map<String,Object> model, HttpServletRequest request, HttpServletResponse response)
            throws Exception {


        PrintWriter writer = response.getWriter();
        writer.write("hi from my resolver!");

    }


}

Now I get this error:

2012-03-29 16:51:28.855:WARN:/:unavailable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewResolver' defined in ServletContext resource [/WEB-INF/application-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'url' is required
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)

I have implemented everything that was required in AbstractTemplateView, but not sure what the url property is requesting?

Also, where is the name of the view that is passed to this viewresolver?

Update

So I added:

 @Override
    public boolean isUrlRequired() {
        return false;
    }

And now I get an error, for example:

HTTP ERROR 404

Problem accessing /home/index. Reason:

    NOT_FOUND

In my application-context.xml there is:

<bean id="viewResolver" class="com.example.MyViewResolver">

</bean>

What am I missing?

+5
source share
4 answers

() AbstractUrlBasedViewResolver, , URL-. , , isUrlRequired() false

+7

: ViewResolver View. . Spring , . , , , View resolveViewName(String viewName, Locale locale) ViewResolver.

, , , : " Hello World Spring MVC". , Spring MVC, - . , ViewResolver View. , - Controller, :

public class MyController implements Controller
{
  public ModelAndView handleRequest(HttpServletRequest request,
     HttpServletResponse response)
  {
    response.getWriter().println("Hello, world!");
    return null;
  }
}

HandlerMapping, :

<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

, URL-, :

<bean name="/home/index" class="MyController" />
+3

Spring MVC. Spring MVC view view, view.

:

  • , "hello world".
  • , .

: : org.springframework.web.servlet.View "hello world" http.

: : org.springframework.web.servlet.ViewResolver .

, viewresolver - , . .: https://fisheye.springsource.org/browse/spring-framework/spring-webmvc/src/main/java/org/springframework/web/servlet/ViewResolver.java

. Spring , .

, . , .

+2

,

Caused by: java.lang.IllegalArgumentException: Property 'url' is required
    at org.springframework.web.servlet.view.AbstractUrlBasedView.afterPropertiesSet(AbstractUrlBasedView.java:67)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$6.run(AbstractAutowireCapableBeanFactory.java:1504)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1502)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 37 more

, AbstractUrlBasedView.java: 67, spring @fisheye.springsource.com,

public void afterPropertiesSet () throws Exception {if (isUrlRequired () && getUrl () == null) {throw new IllegalArgumentException (requires "url-url"); }}

/**
 * Return whether the 'url' property is required.
 * <p>The default implementation returns <code>true</code.
 * This can be overridden in subclasses.
 */
protected boolean isUrlRequired() {
        return true;
}

Thus, it checks if isUrlRequired and getURL is null , it will display the above exception, therefore, by changing isUrlRequired to false, you can avoid the first exception

+1
source

All Articles