我在网上搜索了所有的答案,但找不到答案。我希望有人在处理同样的问题。
我正在开发基于 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 并将请求参数写入视图。我最简单的控制器操作是这样的:
@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'}" />
然后正确呈现“默认”。所以我切换到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?任何帮助表示赞赏。
干杯, 克莱比克