今天蛋疼了。项目需要,一个原先用struts2的项目要移到一个springmvc框架的项目上。之前以为很简单,原先的action换成controller,DAO换成service就行,没想到做的时候发现最大的难点是以前jsp都用的struts2标签写的。如果用springmvc的话我只会用ext在js里那种写法。根本不适合原先的jsp+jquery的用法。最闹听的是让我不用struts标签我就不会了啊。
好了吐槽完毕,捣鼓了一天,有了眉目,还没弄完,不过今天搞的信息量超大。停下来记录备忘下。
今天的内容是怎么搭建一个可以使用struts标签的项目
1 通过mvn引入struts相关的jar包,mvn组织项目及打包是真心好用
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.6</version>
</dependency>
2 配置web.xml,主要是用来拦截,不然jsp在解析到struts标签的时候会报错。错误信息很好认,有错的时候就看看web.xml的filter有没有配置。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3 然后就是在jsp页面里引入struts2标签
<%@ taglib uri="/struts-tags" prefix="s" %>
4 接下来就是后台的代码,主要就是springmvc的简单用法,测试没用到serivce层,数据直接写到controller里了
@RequestMapping(params = "event=main")
public ModelAndView display(HttpServletRequest request,HttpServletResponse response) {
ModelAndView view = new ModelAndView("/askdba/test.jsp");
List<String> list=new ArrayList<String>();
list.add("123");
list.add("234");
list.add("345");
view.addObject("list",list);
view.addObject("testString","asdfasdfasdfadsfads");
return view;
}
5 再然后就是我纠结的地方了
之前struts的用法是action中直接设置变量并给出getter和setter,然后前台用s:proptery标签直接显示就行
但是springmvc里设置getter和setter前台都不认啊。
于是乎打开s:debug标签,打开s:debug标签的方法如下:
<s:debug></s:debug>
然后我就发现,原来view addObject的内容都在request中,于是前台代码用struts标签改写成
<s:iterator var="s" value="#request.list">
<s:property value="s"></s:property>
<br>
</s:iterator>
s:标签:<s:property value="#request.testString"></s:property>
目前要做的就是把原先jsp里的s标签的内容都从request中取得即可,终于避免了原先前台重写的厄运。
总结一下,之前一直都是用struts的框架,后来项目需要用了springmvc,真心觉得springmvc强大。但是前台的展示就不给力了,因为结果和json结合还好,遇到历史项目的时候需要在前台展示变量除了jsp直接写java代码和jstl C标签就没别的方法了。