在我的项目中,有SpringMVC InternalResourceViewResolver用于根URL映射以重定向到主页。
在不影响现有应用程序的情况下,我需要添加一个内部资源视图解析器,以便我可以在WEB-INF中移动一些页面并保护直接访问。
到目前为止,我发现Spring MVC只允许一个InternalResourceViewResolver,并且添加 order 元素也不起作用。
这是用于参考的spring xml,它不起作用。 我需要添加第二个解析器,以便可以防止直接访问页面,这些页面当前在WEB-INF之外,我正在寻找一个有效的SpringMVC配置,以便我可以移动它们:
<bean id="firstViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.ftl</value>
</property> <property name="order" value="0"/>
</bean>
<bean id="secondViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.ftl</value>
</property> <property name="order" value="1"/>
</bean>
更新 由于这些方法似乎都不适合我,我正在尝试使用Servlet过滤器或监听器方法来执行此任务。 Spring MVC应该有一个永久的解决方案,因为它似乎是一个常见的要求,我看到很多人都在努力争取这个。
答案 0 :(得分:0)
Spring不允许你定义2个internalResourceViewResolvers。现在你有两个选择:
您可以继续使用“firstViewResolver”并访问页面内的视图 返回字符串的文件夹,如
“WEB-INF / pages / YourViewName.ftl”
当您访问WEB-INF / pages之外的视图时,从控制器目录 像
一样返回字符串“YourViewName.ftl”。
您可以继续使用“secondViewResolver”并访问以外的视图 WEB-INF /页面返回字符串
“../../ YourViewName.ftl”
来自你的 通过返回字符串访问页面文件夹内的视图时控制器 喜欢
“YourViewName.ftl”。
另一种解决方案是包含不同的viewResolvers。例如:你可以添加 urlBasedViewResolver和internalResourceViewResolver各有不同 前缀和订单。
答案 1 :(得分:0)
尝试将您的文件移动到资源文件夹中名为freemaker的新文件夹以及此配置:
function _submitForm(){
alert('Submit Called...');
$.ajax({
type: "POST",
url: ajaxCallUrl + 'api/ajax/positions/' + lastModifiedPositionId + '/save-position',
data: $("#save_edit_position").serialize(),
error: function(req, message) {
showErrorNotification('It seems something went wrong, sorry...' + message);
},
statusCode: {
400: function (response) {
showErrorNotification(response.responseText);
},
500: function (response) {
showErrorNotification(response.responseText);
}
},
success: function(data)
{
var mymodal = $('#editPositionModal');
mymodal.modal('hide');
showNotification(data, updatePositionsTable(pageBusinessId)); // show response from the php script.
}
});
}
但请注意, FreeMarker ,Velocity,Tiles,Groovy Markup和脚本模板也需要配置基础视图技术。 MVC名称空间提供专用元素。 例如使用FreeMarker:
<mvc:view-resolvers>
<mvc:content-negotiation>
<mvc:default-views>
<bean id="firstViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.ftl</value>
</property> <property name="order" value="0"/>
</bean>
</mvc:default-views>
</mvc:content-negotiation>
<mvc:freemarker cache="false"/>
</mvc:view-resolvers>
<mvc:freemarker-configurer>
<mvc:template-loader-path location="/freemarker"/>
</mvc:freemarker-configurer>