私は答えを探してすべてのウェブを検索しましたが、それを見つけることができませんでした。誰かが同じ問題を扱っていたといいのですが。
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>
とても簡単です。レイアウト/ビューのレンダリングに問題はありません。問題は、SpringControllerとリクエストパラメータのビューへの書き込みにあります。私の最も単純なコントローラーアクションは次のようなものです。
@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ですか?助けていただければ幸いです。
乾杯、クレビック