Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查视图是否存在?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 如何检查视图是否存在?

Java 如何检查视图是否存在?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想在实际解析视图之前检查它是否存在。这是我的控制器,有一些关于我希望它如何工作的评论 @RequestMapping(value="/somethinghere/") public String getSomething(Model inModel, @RequestParam(value="one", defaultValue=Constant.EMPTY_STRING) String one, @RequestParam(value=

我想在实际解析视图之前检查它是否存在。这是我的控制器,有一些关于我希望它如何工作的评论

@RequestMapping(value="/somethinghere/")
    public String getSomething(Model inModel,
            @RequestParam(value="one", defaultValue=Constant.EMPTY_STRING) String one,
            @RequestParam(value="two", defaultValue = Constant.EMPTY_STRING) String two) {
        String view = one + two;
         if (a view with name equal to one + two exists) {
            return view;
        } else {
            return "defaultview";
        }                
}

我想返回一个视图,但只有在我验证确实存在定义了该名称的视图时才返回。如何做到这一点?

首先,考虑如何在春季完成视图解析。假设您使用的是
InternalResourceViewResolver
,默认或显式声明中创建了
InternalResourceView
对象,并通过连接
InternalResourceViewResolver
的前缀、视图名称(由hanbdler返回)和后缀来解析资源路径

返回
视图
对象。请注意,使用
InternalResourceViewResolver
时,该对象不能为
null
,因此无法实现。
DispatcherServlet
然后使用返回的
View
对象的
render()
方法创建HTTP响应。在这种情况下,它将使用一个
RequestDispatcher
,并将视图名称描述的资源转发给它。如果该资源不存在,
Servlet
容器将生成404响应

考虑到所有这些,除非您的
视图
jsp
或相关资源完全不同,否则在容器实际使用
RequestDispatcher
转发请求之前,无法检查资源是否存在


你必须重新考虑你的设计InternalResourceViewResolver,默认或显式声明中创建了
InternalResourceView
对象,并通过连接
InternalResourceViewResolver
的前缀、视图名称(由hanbdler返回)和后缀来解析资源路径

返回
视图
对象。请注意,使用
InternalResourceViewResolver
时,该对象不能为
null
,因此无法实现。
DispatcherServlet
然后使用返回的
View
对象的
render()
方法创建HTTP响应。在这种情况下,它将使用一个
RequestDispatcher
,并将视图名称描述的资源转发给它。如果该资源不存在,
Servlet
容器将生成404响应

考虑到所有这些,除非您的
视图
jsp
或相关资源完全不同,否则在容器实际使用
RequestDispatcher
转发请求之前,无法检查资源是否存在


你必须重新考虑你的设计

我知道这很旧,但我想这可能对某人有所帮助。我有一个场景,CMS为给定的内容类型提供了如何呈现视图的方向。在这种情况下,为这种情况准备一些东西是至关重要的。下面是我过去处理它的方法

首先,我将以下内容注入控制器

@Autowired
private InternalResourceViewResolver viewResolver;

@Autowired
private ServletContext servletContext;
接下来,我添加了这个简单的方法来检查是否存在视图

private boolean existsView(String path) {
    try {
        JstlView view = (JstlView) viewResolver.resolveViewName(path, null);
        RequestDispatcher rd = null;
        URL resource = servletContext.getResource(view.getUrl());
        return resource != null;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
我是这样用的:

    if(!existsView("components/" + fragment.getTemplate().getId())) {
        logger.warn("View for component " + fragment.getTemplate().getId() + " Not found. Rendering fallback.");
        return new ModelAndView("components/notfoundfallback");
    }
我的notfoundfallback.jsp如下所示:

<div class="contact-form">
    <div class="contact-form__container container">
        <div class="contact-form__content" style="background-color: aliceblue;">
            <div class="contact-form__header">
                <h2>No design for content available</h2>
                <span>
                    You are seeing this placeholder component because the content you wish to see
                    doesn't yet have a design for display purposes. This will be rectified as soon as possible.
                </span>
            </div>
        </div>
    </div>
</div>

没有可用内容的设计
您看到此占位符组件是因为您希望看到的内容
还没有用于显示目的的设计。这将尽快得到纠正。
我希望这对将来的人有所帮助。它在标准SpringMVC和SpringBoot MVC中都能工作


谢谢,

我知道这是旧的,但我想这可能会对某人有所帮助。我有一个场景,CMS为给定的内容类型提供了如何呈现视图的方向。在这种情况下,为这种情况准备一些东西是至关重要的。下面是我过去处理它的方法

首先,我将以下内容注入控制器

@Autowired
private InternalResourceViewResolver viewResolver;

@Autowired
private ServletContext servletContext;
接下来,我添加了这个简单的方法来检查是否存在视图

private boolean existsView(String path) {
    try {
        JstlView view = (JstlView) viewResolver.resolveViewName(path, null);
        RequestDispatcher rd = null;
        URL resource = servletContext.getResource(view.getUrl());
        return resource != null;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
我是这样用的:

    if(!existsView("components/" + fragment.getTemplate().getId())) {
        logger.warn("View for component " + fragment.getTemplate().getId() + " Not found. Rendering fallback.");
        return new ModelAndView("components/notfoundfallback");
    }
我的notfoundfallback.jsp如下所示:

<div class="contact-form">
    <div class="contact-form__container container">
        <div class="contact-form__content" style="background-color: aliceblue;">
            <div class="contact-form__header">
                <h2>No design for content available</h2>
                <span>
                    You are seeing this placeholder component because the content you wish to see
                    doesn't yet have a design for display purposes. This will be rectified as soon as possible.
                </span>
            </div>
        </div>
    </div>
</div>

没有可用内容的设计
您看到此占位符组件是因为您希望看到的内容
还没有用于显示目的的设计。这将尽快得到纠正。
我希望这对将来的人有所帮助。它在标准SpringMVC和SpringBoot MVC中都能工作


谢谢,

视图是静态的,不应该因为任何原因而丢失。视图是静态的,不应该因为任何原因而丢失。