Creating Multiple InternalResourceViewResolver

I was wondering if I can create multiple InternalResourceViewResolverin my servlet dispatcher.

Something like that,

<bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" /> 

and another species like this,

<bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/folder/jsp/"
          p:suffix=".jsp" /> 

I do not mean creating multiple views. E.g. Tiles, XML view resolvers

I need to set up two different InternalResourceViewResolver as described here , but I cannot clearly understand it. can this be achieved?

Thanks in advance

+4
source share
3 answers

No. You can have only one of them in your context because of the same reason mentioned in the javadoc :

ViewResolvers, InternalResourceViewResolver , , no , .

InternalResourceViewResolver ( API , , ), , .

JSP .

+2

2 . InSportViewResolver .

    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/WEB-INF/pages1/" />
    <property name="suffix" value=".jsp" /> 
    <property name="order" value="0" />
</bean>

    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages2</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
    <property name="order" value="1" />
    </bean>
+1

public class ChainableUrlBasedViewResolver extends UrlBasedViewResolver {

public ChainableUrlBasedViewResolver() {

    setViewClass(InternalResourceView.class);
}

@Override
protected AbstractUrlBasedView buildView(String viewName) throws Exception {

    String url = getPrefix() + viewName + getSuffix();
    InputStream stream = getServletContext().getResourceAsStream(url);
    if (stream == null){
        return new NonExistentView();
    }
    return super.buildView(viewName);
}

private static class NonExistentView extends AbstractUrlBasedView {

    @Override
    protected boolean isUrlRequired() {

        return false;
    }

    @Override
    public boolean checkResource(Locale locale) throws Exception {

        return false;
    }

    @Override
    protected void renderMergedOutputModel(Map<String , Object> model, 
    HttpServletRequest request, HttpServletResponse response) throws Exception {
        // Purposely empty, it should never get called
    }
}
}

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "ch.frankel.blog.spring.viewresolver.controller")
public class WebConfig {

@Bean
public ViewResolver pageViewResolver() {

    UrlBasedViewResolver resolver = new ChainableUrlBasedViewResolver();
    resolver.setPrefix("/resources/myApp/");
    resolver.setSuffix(".html");
    resolver.setOrder(1);
    return resolver;
}
}

based on this, you have a mapping for your JSP from servlet-context.xml using this code:

<beans:bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

and matching by creating these classes for HTML or others in the resource folder. this link can help you

0
source

All Articles