<p dir="auto"><strong><a href="https://jira.spring.io/secure/ViewProfile.jspa?name=kdonald" rel="nofollow">Keith Donald</a></strong> opened <strong><a href="https://jira.spring.io/browse/SPR-7543?redirect=false" rel="nofollow">SPR-7543</a></strong> and commented</p>
<p dir="auto">It'd be nice instead of having to do this:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="@RequestMapping(value=&quot;/edit/{slug}&quot;, method=RequestMethod.GET)
public String getEditAppForm(@PathVariable String slug, Account account, Model model) {
    model.addAttribute(connectedAppRepository.getAppForm(account.getId(), slug));
    model.addAttribute(&quot;slug&quot;, slug);
    return &quot;develop/apps/edit&quot;;
}"><pre class="notranslate"><code class="notranslate">@RequestMapping(value="/edit/{slug}", method=RequestMethod.GET)
public String getEditAppForm(@PathVariable String slug, Account account, Model model) {
    model.addAttribute(connectedAppRepository.getAppForm(account.getId(), slug));
    model.addAttribute("slug", slug);
    return "develop/apps/edit";
}
</code></pre></div>
<p dir="auto">... and using ${slug} in my template to access the <code class="notranslate">@PathVariable</code> value, I could simply do:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="@RequestMapping(value=&quot;/edit/{slug}&quot;, method=RequestMethod.GET)
public String getEditAppForm(@PathVariable String slug, Account account, Model model) {
    model.addAttribute(connectedAppRepository.getAppForm(account.getId(), slug));
    return &quot;develop/apps/edit&quot;;
}"><pre class="notranslate"><code class="notranslate">@RequestMapping(value="/edit/{slug}", method=RequestMethod.GET)
public String getEditAppForm(@PathVariable String slug, Account account, Model model) {
    model.addAttribute(connectedAppRepository.getAppForm(account.getId(), slug));
    return "develop/apps/edit";
}
</code></pre></div>
<p dir="auto">and reference something automatically exposed like ${pathVars.slug} in my template.</p>
<hr>
<p dir="auto"><strong>Affects:</strong> 3.0.4</p>
<p dir="auto"><strong>Issue Links:</strong></p>
<ul dir="auto">
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398100245" data-permission-text="Title is private" data-url="https://github.com/spring-projects/spring-framework/issues/11152" data-hovercard-type="issue" data-hovercard-url="/spring-projects/spring-framework/issues/11152/hovercard" href="https://github.com/spring-projects/spring-framework/issues/11152">#11152</a> Access URI template variables in view (<em><strong>"duplicates"</strong></em>)</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398114876" data-permission-text="Title is private" data-url="https://github.com/spring-projects/spring-framework/issues/13391" data-hovercard-type="issue" data-hovercard-url="/spring-projects/spring-framework/issues/13391/hovercard" href="https://github.com/spring-projects/spring-framework/issues/13391">#13391</a> Need a way to disable behavior added in "Automatically expose <code class="notranslate">@PathVariables</code> in the Model" SPR-7543</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398113210" data-permission-text="Title is private" data-url="https://github.com/spring-projects/spring-framework/issues/13130" data-hovercard-type="issue" data-hovercard-url="/spring-projects/spring-framework/issues/13130/hovercard" href="https://github.com/spring-projects/spring-framework/issues/13130">#13130</a> Use AbstractView instead of HandlerMethodArgumentResolver to add <code class="notranslate">@PathVariable</code> values to the model</li>
</ul>
<p dir="auto"><strong>Referenced from:</strong> commits <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/spring-projects/spring-framework/commit/ed9d9a402ba8ffa2cacebea35f6192bdc898ce4d/hovercard" href="https://github.com/spring-projects/spring-framework/commit/ed9d9a402ba8ffa2cacebea35f6192bdc898ce4d"><tt>ed9d9a4</tt></a></p>
<p dir="auto"><strong><a href="https://jira.spring.io/secure/ViewProfile.jspa?name=spydesk" rel="nofollow">Simon Barbey</a></strong> opened <strong><a href="https://jira.spring.io/browse/SPR-5411?redirect=false" rel="nofollow">SPR-5411</a></strong> and commented</p>
<p dir="auto">After upgrading Apache Tiles from version 2.1.0 to 2.1.1, the integration with Spring no longer works.</p>
<p dir="auto">The class TilesConfigurer fails to initialize properly the Tiles environment, as visible in the stack trace :</p>
<p dir="auto">java.lang.UnsupportedOperationException: Class org.apache.tiles.web.util.ServletContextAdapter<br>
not recognized a TilesApplicationContext<br>
at org.apache.tiles.factory.TilesContainerFactory.createContainer(TilesContainerFactory.java:219)<br>
at org.springframework.web.servlet.view.tiles2.TilesConfigurer.createTilesContainer(TilesConfigurer.java:214)<br>
at org.springframework.web.servlet.view.tiles2.TilesConfigurer.afterPropertiesSet(TilesConfigurer.java:201)<br>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)<br>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)<br>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)<br>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)<br>
at java.security.AccessController.doPrivileged(Native Method)<br>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)<br>
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)<br>
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)<br>
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)<br>
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)<br>
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)<br>
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)<br>
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)<br>
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)<br>
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:402)<br>
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:316)<br>
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:282)<br>
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126)<br>
at javax.servlet.GenericServlet.init(GenericServlet.java:69)<br>
at com.caucho.server.dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java:646)<br>
at com.caucho.server.dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:587)<br>
at com.caucho.server.dispatch.ServletManager.init(ServletManager.java:154)<br>
at com.caucho.server.webapp.Application.start(Application.java:1654)<br>
at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:621)<br>
at com.caucho.server.deploy.DeployController.restartImpl(DeployController.java:584)<br>
at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.request(StartAutoRedeployAutoStrategy.java:125)<br>
at com.caucho.server.deploy.DeployController.request(DeployController.java:554)<br>
at com.caucho.server.webapp.ApplicationContainer.getApplication(ApplicationContainer.java:885)<br>
at com.caucho.server.webapp.ApplicationContainer.buildInvocation(ApplicationContainer.java:725)<br>
at com.caucho.server.host.Host.buildInvocation(Host.java:459)<br>
at com.caucho.server.host.HostContainer.buildInvocation(HostContainer.java:353)<br>
at com.caucho.server.resin.ServletServer.buildInvocation(ServletServer.java:653)<br>
at com.caucho.server.dispatch.DispatchServer.buildInvocation(DispatchServer.java:198)<br>
at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:415)<br>
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)<br>
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)</p>
<hr>
<p dir="auto"><strong>Affects:</strong> 2.5.6</p>
<p dir="auto"><strong>Reference URL:</strong> <a href="http://forum.springsource.org/showthread.php?t=65907" rel="nofollow">http://forum.springsource.org/showthread.php?t=65907</a></p>
<p dir="auto"><strong>Attachments:</strong></p>
<ul dir="auto">
<li><a href="https://jira.spring.io/secure/attachment/15966/CustomSpringTilesConfigurer.java" rel="nofollow">CustomSpringTilesConfigurer.java</a> (<em>4.97 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15321/CustomSpringTilesConfigurer.java" rel="nofollow">CustomSpringTilesConfigurer.java</a> (<em>3.85 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15282/CustomSpringTilesConfigurer.java" rel="nofollow">CustomSpringTilesConfigurer.java</a> (<em>2.86 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15967/CustomTilesContainerFactory.java" rel="nofollow">CustomTilesContainerFactory.java</a> (<em>9.96 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15322/CustomTilesContainerFactory.java" rel="nofollow">CustomTilesContainerFactory.java</a> (<em>8.42 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15283/CustomTilesContainerFactory.java" rel="nofollow">CustomTilesContainerFactory.java</a> (<em>6.51 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15284/CustomTilesListener.java" rel="nofollow">CustomTilesListener.java</a> (<em>1.64 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15968/CustomVelocityTilesView.java" rel="nofollow">CustomVelocityTilesView.java</a> (<em>1.79 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15238/SpringTilesConfigurer.java" rel="nofollow">SpringTilesConfigurer.java</a> (<em>10.97 kB</em>)</li>
<li><a href="https://jira.spring.io/secure/attachment/15212/TilesConfigurer.java" rel="nofollow">TilesConfigurer.java</a> (<em>10.63 kB</em>)</li>
</ul>
<p dir="auto"><strong>Issue Links:</strong></p>
<ul dir="auto">
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398094004" data-permission-text="Title is private" data-url="https://github.com/spring-projects/spring-framework/issues/10280" data-hovercard-type="issue" data-hovercard-url="/spring-projects/spring-framework/issues/10280/hovercard" href="https://github.com/spring-projects/spring-framework/issues/10280">#10280</a> Support Tiles 2.2 for Velocity and FreeMarker purposes</li>
<li><a href="https://jira.spring.io/browse/SWF-1077" rel="nofollow">SWF-1077</a> Infinite loop when using SWF + Ajax (<em><strong>"supersedes"</strong></em>)</li>
</ul>
<p dir="auto"><strong>Referenced from:</strong> commits <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/spring-projects/spring-framework/commit/2b13afd8917603577218576315f68a8cc2132772/hovercard" href="https://github.com/spring-projects/spring-framework/commit/2b13afd8917603577218576315f68a8cc2132772"><tt>2b13afd</tt></a></p>
<p dir="auto">11 votes, 21 watchers</p>