gpt4 book ai didi

java - 根据请求使用不同的 View 解析器

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:15 24 4
gpt4 key购买 nike

我尝试解决以下问题:

我已经设置了自己的 viewResolver,为我的所有请求添加了页眉和页脚(谢谢,stackoverflow;p)。这工作得很好。

问题是我的 ajax 请求(将 View 返回到特定容器)也会自动获取页眉和页脚,这当然不是预期的。

如果请求包含“/ajax/”,如何让 viewResolver 采取不同的行为?实际上,jSTL-Viewer 对他们来说工作得很好,但目前,我自己的解析器是唯一使用的,因为我不知道如何告诉 spring 在 '/ajax/' 上采取不同的行为。

这是我自己的解析器,非常简单,只是从这里获取的:

public class ViewTemplate extends InternalResourceView {
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
String dispatcherPath = prepareForRendering(request, response);
request.setAttribute("partial", dispatcherPath.substring(nthOccurrence( dispatcherPath, '/' , 2 ) + 1));

RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/layout.jsp");
rd.include(request, response);
}

// more functions like nthOccurrence


}

我是否必须告诉解析器 if indexOf("/ajax/") != -1 jstView 需要被调用?如果是的话,怎么办?还是我做的完全错误?我想保留我的页眉/页脚,因为它们适用于所有非 ajax 请求!

感谢任何帮助!

谢谢!

最佳答案

您已经将 View 的代码而不是 ViewResolver 放在了正确的位置,我认为一个好的解决方案可能是链接 ViewResolvers - 只需为您的 ajax View 声明一个新的 ViewResolver 即可。对于Ajax相关的 View ,让这个 View 解析器返回一个值,否则返回null,这将自动让ViewResolver考虑链中的下一个ViewResolver,它可以是您当前的ViewResolver。

例如。

<beans:bean id="ajaxViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="order" value="1"></beans:property>
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="viewNames">
<beans:list>
<beans:value>ajax*</beans:value>
</beans:list>
</beans:property>
<beans:property name="suffix" value=".jsp" />
</beans:bean>

在上述情况下,如果您从 Controller 返回 View 名称为“ajaxsomeview”,那么它将由 ajaxViewResolver 处理,如果您返回“somethingelse”,它将由您当前的 ViewResolver 处理。

关于java - 根据请求使用不同的 View 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com