我搜索了所有的网页寻找答案,但无法填写。我希望有人在处理同样的问题。
我正在开发基于Spring MVC(3.1)和Freemarker(2.3.16)的应用程序。我的Freemarker配置如下所示:
<!-- FreeMarker parsing -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF" />
<property name="freemarkerSettings">
<props>
<prop key="default_encoding">UTF-8</prop>
<prop key="output_encoding">UTF-8</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="/views/" />
<property name="suffix" value=".ftl" />
<property name="requestContextAttribute" value="rc"></property>
<!-- if you want to use the Spring FreeMarker macros, set this property to true -->
<property name="exposeSpringMacroHelpers" value="true" />
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
</bean>
这很简单。我对渲染布局/视图没有任何问题。问题在于Spring Controller和将Request Parameters写入视图。我最简单的控制器动作是这样的:
@RequestMapping(value={"/simplest/action","/simplest"}, method=RequestMethod.GET)
@Transactional
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ModelAndView mv = new ModelAndView("/simplest/action");
mv.addObject("myCustomIdFromView", "66666" );
return mv;
}
视图呈现成功。在这个视图中我使用了这样的结构:
<input type="hidden" name="myCustomIdFromView" id="myCustomIdFromView" value="${myCustomIdFromView}" />
但是有了这样的结构,Freemarker显示没有价值。如果我将输入更改为:
<input type="hidden" name="myCustomIdFromView" id="myCustomIdFromView" value="${myCustomIdFromView!'default'}" />
然后正确呈现'default'。所以我切换到RequestParameters。还有一件奇怪的事。结构:
{$RequestParameters.myCustomIdFromView}
{$RequestParameters['myCustomIdFromView']}
我收到Freemarker'undefined'的空值。
我终于找到了这样的解决方案。
<#assign myCustomIdFromView = '' />
<#list RequestParameters?keys as key>
<#if key == 'myCustomIdFromView'>
<#assign myCustomIdFromView = RequestParameters[key] />
${myCustomIdFromView}
</#if>
</#list>
它在工作!任何人都可以告诉我为什么我有这样简单的问题,如将参数传递给ModelAndView并在模板中呈现它?模型/请求参数中的值(如您所见)但是它的Freemarker会导致问题吗?任何帮助表示赞赏。
干杯, Chlebik
答案 0 :(得分:1)
我发现了什么问题。我正在使用Spring MVC。因此,默认规则是,默认情况下将加载所有-servlet.xml
个配置文件。
在我的frontcontroller-servlet.xml
我有导入语句,其中包含基础applicationContext.xml
。在这个文件中,我有另外3个导入(支持配置文件的碎片整理 - 配置DB,控制器等)。
但 web.xml 中提供的内容是:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*</param-value>
</context-param>
这两个结合起来的结果是标准Spring bean的双重创建。当我开始与Spring Security集成时出现 - 突然我的应用程序无法部署 - 并且异常指出现有的双bean(@Autowire
注释变得疯狂)。
所以我假设Spring(或Spring本身)的内部Freemarker
类内部发生了一些事情并且存在两个模型(带有请求参数)。现在 - 当我使用我的问题中的代码时,一切都正常。