有一段时间我使用Spring框架开发Web应用程序,一切都运行得很好。但是最近我不得不在我的页面中引入一些 AJAX 调用。在谷歌上搜索之后,我发现Tiles 2在接收ajax调用时为解析视图提供了很好的支持,使用参数'fragments= nameOfTile'。要实现这一点,您必须使用org.springframework.js. AJAX .AjaxUrlBasedViewResolverwhich和org. js. ajax.AjaxUrlBasedViewResolverwhich。springframework.js.ajax.tiles2.AjaxTilesView.
以下是我的视图解析器配置(请注意,我使用TILES.3.0.1):
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions" value="WEB-INF/tiles-config.xml"/>
</bean>
<bean id="ajaxViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver" p:order="0">
<property name="viewClass" value="org.springframework.js.ajax.tiles2.AjaxTilesView"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" p:order="1">
</bean>
正如我之前提到的,当我不使用这个:
<bean id="ajaxViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver" p:order="0">
<property name="viewClass" value="org.springframework.js.ajax.tiles2.AjaxTilesView"/>
</bean>
一切都很好,但是当我把ajaxViewResolver引入我的代码时,我请求的任何页面(通常是ajax调用的)都得到了这样的响应:
HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/tiles/TilesApplicationContext
所以我的问题是:
- 我可以将AjaxUrlBasedViewResolver与Tiles 3沿着使用吗?
- 如果是,如何解决我的问题?可能的原因是什么?
- 如果没有,是否有任何“现成”的解决方案?
谢谢你的帮助,K
编辑#1:@Bar说:“您是否已包含spring-webflow jar文件?springsource.org/spring-web-flow#download“
我使用Maven作为我的依赖管理器。下面你可以看到我的pom.xml:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
</dependency>
所以应该包括在内。
3条答案
按热度按时间ykejflvf1#
好的,我已经发现了这个问题。自从Tails 3之后,RequestContext上面的抽象已经改变了,
org.springframework.js.ajax.tiles2.AjaxTilesView
使用的是旧的。这就是为什么它不工作的原因,它引用了不存在的类。经过一些实验和对tails 3 javadoc的搜索,我成功地重写了这个代码(AjaxTilesView)类,并采用它在tails 3环境中工作。我已经做了一些测试,目前它工作正常。唯一的问题是你必须在ajax请求中指定头或附加参数,这将通知这实际上是ajax调用。下面你可以看到重写的AjaxTilesView类,配置示例和jquery调用示例。
Java:
查询:
dispatcher-config.xml:
如果任何人不喜欢添加头到他们的jquery,正如我之前提到的,你可以使用参数
ajaxSource
的值并不重要,但它必须有文本。mwg9r5ms2#
我认为您遗漏了 tiles-core 和 tiles-api 依赖项。
uqjltbpv3#
去年Spring,WebFlow 2.4.0包括org.springframework.webflow.mvc.view.FlowAjaxTiles3View的实现(它扩展了一个新的org.springframework.js.ajax.tiles3.AjaxTilesView),该实现还可以与Tiles 3一起工作,并且除了使用“fragments”请求参数之外,还允许将渲染片段定义到流定义中:
此外,您不应忘记将视图工厂指向viewResolver: