Оба имеют довольно хорошую поддержку freemarker.Его легко включить.Struts2 немного больше основан на pojo.Весна немного ближе к сервлету API.Макросы Spring по умолчанию в spring.ftl требуют небольшой работы, и вам, вероятно, понадобится свернуть свои собственные.Некоторые макросы взрываются, если объект отсутствует, вместо того, чтобы изящно проверять его и двигаться дальше, если его там нет.
Мне нравится применение проверки Spring с помощью аннотаций лучше, чем проверка по умолчанию в Struts 2.Тем не менее, сохранение ошибок валидации при перенаправлениях легче в Struts2.Для Spring вам в конечном итоге понадобится развернуть собственное решение, в котором, как мне кажется, фреймворк должен скрывать больше этого.Необходимость использования подверженного ошибкам макроса spring.bind с шаблонами freemarker более обременительна, чем это необходимо.
Предполагается, что Spring 3.1 обеспечит лучшую поддержку для ошибок проверки при переадресации.
Также обратите внимание, что в Spring я обычно использую более одного преобразователя представления.например, я все еще оставляю поддержку для .jsp.
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="ftl" value="text/html"/>
<entry key="xml" value="application/xml"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="favorPathExtension" value="true"/>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
</list>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="order" value="1"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".ftl"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="requestContextAttribute" value="rc"/>
<property name="exposeSessionAttributes" value="true"/>
<property name="exposeRequestAttributes" value="true"/>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>