`
dawuafang
  • 浏览: 1191968 次
文章分类
社区版块
存档分类
最新评论

《struts2权威指南》学习笔记之struts2整合jsf

 
阅读更多

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框架概览 **起源与发展:** Struts2是WebWork框架的后续版本,融合了Struts1和WebWork的优点,形成了一种更为先进和灵活的MVC框架。相较于Struts1,Struts2在设计...

    Struts2学习笔记

    Struts2提供了丰富的插件和集成框架,可以与其他技术如Spring、Hibernate等无缝配合,提供了如JSF、Tapestry、SpringMVC等视图层框架的替代方案。面向接口编程、面向组件编程和面向方面编程的思想在Struts2中得到了...

    传智168期JavaEE struts2杜宏 day 29~day31笔记.pdf

    标题中的“传智168期JavaEE struts2杜宏 day 29~day31笔记”暗示了文档是一系列关于JavaEE技术栈中的Struts2框架的课程笔记,由杜宏教授,并且特别强调了是从29天到31天的学习内容。JavaEE(Java Platform, ...

    林信良java学习笔记

    林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等

    SSH学习笔记3 SSH学习笔记3

    SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...

    JavaEE5实战笔记04JSF的一些补充

    此外,尽管JSF提供了数据验证和转换功能,但相比Struts2,其灵活性可能稍逊一筹。 5. **实际应用**: 在实际项目中,JSF常用于构建复杂的Web应用,尤其是在需要高度组件化和数据管理的场景下。通过结合其他JavaEE...

    JavaEE5学习笔记13-JSF集成Facelets使用经验总结

    ### JavaEE5学习笔记13-JSF集成Facelets使用经验总结 #### 一、Facelets简介及集成 **Facelets** 是一个为 **JSF**(JavaServer Faces)设计的视图技术,它提供了一种更为简洁高效的方式来构建JSF应用的用户界面。...

    JavaEE5学习笔记12-JSF集成AJAX使用经验总结

    ### JavaEE5学习笔记12-JSF集成AJAX使用经验总结 #### 1. JSF (JavaServer Faces) 概览 JavaServer Faces (JSF) 是 Java EE 的一个重要组成部分,它提供了一种构建用户界面的组件框架。JSF 允许开发者创建可重用的...

    SSH JavaC++良葛格全能学习笔记.rar包括java,C++,算法,Window界面组建,JSF,Struts,Spring,Hibernate,JSPServlet,JUint,JavaC++从初学到高手的学习方法等经典极品不容错过!!

    SSH包括java,C++,算法,Window界面组建,JSF,Struts,Spring,Hibernate,JSPServlet,JUint,JavaC++从初学到高手的学习方法等经典极品不容错过!!

    struts笔记

    这篇笔记主要围绕Struts框架的核心概念、工作原理以及实际应用进行深入探讨。 一、Struts框架概述 Struts提供了一种组织应用程序结构的方式,它将业务逻辑、控制流程和表现层分离,使得开发人员可以更专注于业务...

    JavaEE5学习笔记11-JSF转换器验证器使用经验总结

    ### JavaEE5学习笔记11-JSF转换器验证器使用经验总结 在JavaEE5的学习过程中,JSF(JavaServer Faces)作为一款重要的框架被广泛应用于企业级应用开发。本篇笔记将重点介绍JSF中的两个核心概念:转换器(Converter)...

    林信良 笔记全集 struts hibernate spring ajax ibtatis

    struts hibernate spring ajax ibtatis java jsp/servlet ejb3.0 jsf junit 设计模式 等 非常不错,

    良葛格java学习笔记

    常見程式演算,電腦圖學入門,設計模式,C 語言,GTK,C++,Qt3,Qt4,,Java (上),Java (下),JSP/Servlet,JSF,Ajax,JUnit,Struts,Spring,Hibernate,Acegi

    j2ee精华学习笔记

    **J2EE精华学习笔记** J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级分布式应用程序的框架。本学习笔记旨在深入解析...希望这份J2EE精华学习笔记能为你的学习之路提供有力的指引。

    java web学习笔记

    Java Web学习笔记是深入理解Web开发技术的重要参考资料,尤其对于初学者来说,它提供了一条系统学习的路径。这份笔记的作者在学习过程中积累了丰富的知识,并将其归纳整理,旨在帮助那些希望进入Java Web领域的...

    appfuse学习笔记(二)新建模块

    在本篇“appfuse学习笔记(二)新建模块”中,我们将深入探讨AppFuse框架的模块创建过程。AppFuse是一个开源项目,它提供了一个快速开发Web应用的基础结构,旨在简化开发流程并提高代码质量。通过AppFuse,开发者...

    javaweb 学习笔记(李巍老师)

    8. **Struts、Spring MVC、JSF等MVC框架**:这些框架简化了JavaWeb开发,提供了模型绑定、数据校验、AOP(面向切面编程)等功能,减少了大量重复代码。 9. **RESTful API设计**:REST(Representational State ...

    AppFuse学习笔记(J2EE入门级框架)

    AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了一个基础的 J2EE 框架,用于演示如何集成多个流行的技术,如 Spring、Hibernate、iBatis、Struts、xDcolet、JUnit、Taperstry 和 JSF 等。...

Global site tag (gtag.js) - Google Analytics