1.安装jsf插件
为了在struts2应用中使用JSF组件(实际上就是MyFaces组件,因为Myfaces是jsf的一个实现,必须将myfaces的lib路径下的jar文件都复制到web应用的WEB-INF/lib下)
2.将struts2框架下的struts2-jsf-plugin-2.06.jar复制到WEB-INF/lib下
3.修改web.xml文件,增加MYFaces的支持
web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appid="jsf"version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

<!--JavaServerFacesServletConfiguration,notuseddirectly-->
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!--JavaServerFacesServletMapping,notcalleddirectly-->
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
applicationContext.xml
<?xmlversion="1.0"encoding="GBK"?>
<!--指定Spring配置文件的Schema信息-->
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

<beanid="bs"class="service.BookService"/>

</beans>

我们在spring配置文件中没有定义action的bean,所以,我们采用自动装配的方式将该业务逻辑注入到action实例中,为了让struts2使用spring框架,我们需要加入struts2-spring-plugin-2.0.6.jar到WEB-INF/lib中
并在struts.properties做如下定义
struts.i18n.encoding=gb2312
struts.objectFactory.spring.autoWire=type
struts.xml
<?xmlversion="1.0"encoding="GBK"?>
<!DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constantname="struts.custom.i18n.resources"value="messageResource"/>
<constantname="struts.i18n.encoding"value="GBK"/>

<packagename="jsf"extends="jsf-default">
<interceptors>
<interceptor-stackname="jsfFullStack">
<interceptor-refname="params"/>
<interceptor-refname="basicStack"/>
<interceptor-refname="jsfStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-refname="jsfFullStack"/>
</package>

<packagename="lee"extends="jsf">
<actionname="list"class="action.BookAction">
<resultname="success"type="jsf"/>
</action>
<actionname="edit"class="action.BookAction">
<resultname="success"type="jsf"/>
<resultname="list"type="redirect">list.action</result>
</action>
</package>

</struts>
BookSevice
packageservice;

importjava.util.HashSet;
importjava.util.Set;

importmodel.Book;

publicclassBookService

...{
privateSet<Book>bookDb;

publicBookService()

...{
bookDb=newHashSet<Book>();
bookDb.add(newBook(1,"Spring2.0宝典","全面介绍了Spring各个知识点"));
bookDb.add(newBook(2,"轻量级J2EE企业应用实战","介绍实际企业的J2EE开发过程"));
}

publicSet<Book>getAllBook()

...{
returnbookDb;
}

publicBookgetBookById(intid)

...{
for(Bookb:bookDb)

...{
if(b.getId()==id)

...{
returnb;
}
}
returnnull;
}


publicvoidaddBook(Bookb)

...{
bookDb.add(b);
}
}
Book
packagemodel;


publicclassBook

...{
privateintid;
privateStringname;
privateStringdesc;

publicBook()

...{
}

publicBook(intid,Stringname,Stringdesc)

...{
this.id=id;
this.name=name;
this.desc=desc;
}

publicvoidsetId(intid)

...{
this.id=id;
}
publicintgetId()

...{
returnthis.id;
}

publicvoidsetName(Stringname)

...{
this.name=name;
}
publicStringgetName()

...{
returnthis.name;
}

publicvoidsetDesc(Stringdesc)

...{
this.desc=desc;
}
publicStringgetDesc()

...{
returnthis.desc;
}

publicinthashCode()

...{
returnid;
}
publicbooleanequals(Objecttarget)

...{
if(targetinstanceofBook)

...{
Bookb=(Book)target;
if(b.getId()==this.id)

...{
returntrue;
}
}
returnfalse;
}
}
BookAction
packageaction;

importjava.util.ArrayList;
importjava.util.List;

importmodel.Book;
importservice.BookService;

importcom.opensymphony.xwork2.ActionSupport;

publicclassBookActionextendsActionSupport

...{
privateBookcurrentBook;
privateinteditId;

privateBookServicebs;
publicvoidsetBs(BookServicebs)

...{
this.bs=bs;
}

publicvoidsetCurrentBook(BookcurrentBook)

...{
this.currentBook=currentBook;
}
publicBookgetCurrentBook()

...{
//如果editId请求参数不为空,则currentBook也不为空
if(editId!=0)

...{
this.currentBook=bs.getBookById(editId);
}
elseif(currentBook==null)

...{
currentBook=newBook();
}
returnthis.currentBook;
}

publicvoidsetEditId(inteditId)

...{
this.editId=editId;
}
publicintgetEditId()

...{
returnthis.editId;
}

publicList<Book>getAllBook()

...{
List<Book>result=newArrayList<Book>();
for(Bookb:bs.getAllBook())

...{
result.add(b);
}
returnresult;
}

publicStringsave()

...{
bs.addBook(currentBook);
return"list";
}

}
list.jsp

<%...@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%...@taglibprefix="f"uri="http://java.sun.com/jsf/core"%>

<%...@taglibprefix="h"uri="http://java.sun.com/jsf/html"%>
<html>
<head>
<title>Struts2+MyFaces+Spring整合</title>
</head>
<body>
<f:view>
<h3>Struts2+MyFaces+Spring整合</h3>
<h3>列出所有图书</h3>
<h:dataTablevalue="#{action.allBook}"var="b"style="text-align:center;width:500px"border="1">
<h:column>
<f:facetname="header">
<h:outputTextvalue="图书ID"/>
</f:facet>
<h:outputLinkvalue="edit.action">
<f:paramname="editId"value="#{b.id}"/>
<h:outputTextvalue="#{b.id}"/>
</h:outputLink>
</h:column>
<h:column>
<f:facetname="header">
<h:outputTextvalue="图书名"/>
</f:facet>
<h:outputTextvalue="#{b.name}"/>
</h:column>
<h:column>
<f:facetname="header">
<h:outputTextvalue="图书简介"/>
</f:facet>
<h:outputTextvalue="#{b.desc}"/>
</h:column>
</h:dataTable>
<p>
<h:outputLinkvalue="edit.action">
<h:outputTextvalue="新增图书"/>
</h:outputLink>
</p>
</f:view>
</body>
</html>
edit.jsp

<%...@pagelanguage="java"contentType="text/html;charset=GBK"%>

<%...@taglibprefix="f"uri="http://java.sun.com/jsf/core"%>

<%...@taglibprefix="h"uri="http://java.sun.com/jsf/html"%>
<html>
<head>
<title>Struts2+MyFaces+Spring整合</title>
</head>
<body>
<f:view>
<h3>Struts2+MyFaces+Spring整合</h3>
<h3>修改/保存图书</h3>
<h:form>
<h:inputHiddenvalue="#{action.editId}"/>
<h:panelGridcolumns="3">
<h:outputTextvalue="图书ID"/>
<h:inputTextid="id"size="5"value="#{action.currentBook.id}"required="true"/>
<h:messagefor="id"/>
<h:outputTextvalue="图书名:"/>
<h:inputTextid="name"size="30"value="#{action.currentBook.name}"required="true">
<f:validateLengthminimum="2"maximum="100"/>
</h:inputText>
<h:messagefor="name"/>
<h:outputTextvalue="图书描述:"/>
<h:inputTextid="desc"size="30"value="#{action.currentBook.desc}"required="true">
<f:validateLengthminimum="2"maximum="100"/>
</h:inputText>
<h:messagefor="desc"/>
</h:panelGrid>
<h:commandButtonvalue="保存"action="#{action.save}"/>
<br/>
</h:form>
</f:view>
</body>
</html>
如果context为test,则运行哦哪个http://localhost:8080/test/list.action进行测试,不能直接运行list.jsp
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
### Struts2学习笔记知识点详解 #### 一、Struts2框架概览 **起源与发展:** Struts2是WebWork框架的后续版本,融合了Struts1和WebWork的优点,形成了一种更为先进和灵活的MVC框架。相较于Struts1,Struts2在设计...
Struts2提供了丰富的插件和集成框架,可以与其他技术如Spring、Hibernate等无缝配合,提供了如JSF、Tapestry、SpringMVC等视图层框架的替代方案。面向接口编程、面向组件编程和面向方面编程的思想在Struts2中得到了...
标题中的“传智168期JavaEE struts2杜宏 day 29~day31笔记”暗示了文档是一系列关于JavaEE技术栈中的Struts2框架的课程笔记,由杜宏教授,并且特别强调了是从29天到31天的学习内容。JavaEE(Java Platform, ...
林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等
SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...
此外,尽管JSF提供了数据验证和转换功能,但相比Struts2,其灵活性可能稍逊一筹。 5. **实际应用**: 在实际项目中,JSF常用于构建复杂的Web应用,尤其是在需要高度组件化和数据管理的场景下。通过结合其他JavaEE...
### JavaEE5学习笔记13-JSF集成Facelets使用经验总结 #### 一、Facelets简介及集成 **Facelets** 是一个为 **JSF**(JavaServer Faces)设计的视图技术,它提供了一种更为简洁高效的方式来构建JSF应用的用户界面。...
### JavaEE5学习笔记12-JSF集成AJAX使用经验总结 #### 1. JSF (JavaServer Faces) 概览 JavaServer Faces (JSF) 是 Java EE 的一个重要组成部分,它提供了一种构建用户界面的组件框架。JSF 允许开发者创建可重用的...
SSH包括java,C++,算法,Window界面组建,JSF,Struts,Spring,Hibernate,JSPServlet,JUint,JavaC++从初学到高手的学习方法等经典极品不容错过!!
这篇笔记主要围绕Struts框架的核心概念、工作原理以及实际应用进行深入探讨。 一、Struts框架概述 Struts提供了一种组织应用程序结构的方式,它将业务逻辑、控制流程和表现层分离,使得开发人员可以更专注于业务...
### JavaEE5学习笔记11-JSF转换器验证器使用经验总结 在JavaEE5的学习过程中,JSF(JavaServer Faces)作为一款重要的框架被广泛应用于企业级应用开发。本篇笔记将重点介绍JSF中的两个核心概念:转换器(Converter)...
struts hibernate spring ajax ibtatis java jsp/servlet ejb3.0 jsf junit 设计模式 等 非常不错,
常見程式演算,電腦圖學入門,設計模式,C 語言,GTK,C++,Qt3,Qt4,,Java (上),Java (下),JSP/Servlet,JSF,Ajax,JUnit,Struts,Spring,Hibernate,Acegi
**J2EE精华学习笔记** J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级分布式应用程序的框架。本学习笔记旨在深入解析...希望这份J2EE精华学习笔记能为你的学习之路提供有力的指引。
Java Web学习笔记是深入理解Web开发技术的重要参考资料,尤其对于初学者来说,它提供了一条系统学习的路径。这份笔记的作者在学习过程中积累了丰富的知识,并将其归纳整理,旨在帮助那些希望进入Java Web领域的...
在本篇“appfuse学习笔记(二)新建模块”中,我们将深入探讨AppFuse框架的模块创建过程。AppFuse是一个开源项目,它提供了一个快速开发Web应用的基础结构,旨在简化开发流程并提高代码质量。通过AppFuse,开发者...
8. **Struts、Spring MVC、JSF等MVC框架**:这些框架简化了JavaWeb开发,提供了模型绑定、数据校验、AOP(面向切面编程)等功能,减少了大量重复代码。 9. **RESTful API设计**:REST(Representational State ...
AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了一个基础的 J2EE 框架,用于演示如何集成多个流行的技术,如 Spring、Hibernate、iBatis、Struts、xDcolet、JUnit、Taperstry 和 JSF 等。...