Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>JSP和Servlet>>Tiles在JSF框架中的应用指南
Tiles在JSF框架中的应用指南
2005-08-18   来源:CSDN  作者:zeq258

如果你还不知道Tiles是什么,这篇文章对你没有意义。如果你不了解JSF,那你看这篇文章是在浪费时间。如果你正在为怎么在JSF里面用Tiles发愁,This is what u want!!!!!!

可能有人会问:“为什么用tiles?为什么用JSF,不用Struts?”。如果你对tiles在struts中的应用了如指掌,那你不会问第一个问题。同样,如果你用过JSF,我相信你会在以后的项目中优先考虑JSF而不是Struts。(其实我比较赞成Struts和JSF的互补,他们各有各的优势,Struts强大的逻辑控制使它更适合于表示逻辑简单而控制逻辑复杂的系统,而JSF在view层次的表现力同样是惊人的。建议去看看David Geary的帖子“Top Ten Reasons to Prefer JSF over Struts”)

好了,废话不说了。来看看Tiles是怎样融合到JSF里面的。注意,JSF的配置我不多讲,如果你JSF都不知道怎么运转,那就不要浪费时间了。

1.把Struts1.1里面的struts.jar考到lib目录下面。

2.在web.xml里面加上下面配置:

   <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
  <servlet-name>TilesServet</servlet-name>
  <servlet-class>org.apache.struts.tiles.TilesServlet</servlet-class>
  <init-param>
   <param-name>definitions-config</param-name>
   <param-value>/WEB-INF/tiles-defs.xml</param-value>
  </init-param>
  <init-param>
   <param-name>definitions-parser-validate</param-name>
   <param-value>true</param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
 </servlet>

   蓝色部分是你要加的。注意上面的servlet的load顺序。

3.添加tiles-defs.xml到/WEB-INF/下面,这个配置文件和以前在struts里面的没有差别,一个典型的配置如下:

<!DOCTYPE tiles-definitions PUBLIC
 "-//Apache Software Foundation//DTD Tiles Configuration//EN"
 "
http://jakarta.apache.org/struts/dtds/tiles-config.dtd">

<tiles-definitions>
 <definition  name="report.main" path="/JSPROOT/templates/topLayout.jsp">
          <put name="header" value="/JSPROOT/templates/header.jsp"></put>
          <put name="menu" value="/JSPROOT/templates/menu.jsp"></put>
          <put name="footer" value="/JSPROOT/templates/footer.jsp"></put>
          <put name="body" value="/JSPROOT/reports/report_main.jsp"></put>
        </definition>
        <definition name="report.summary" extends="report.main">
          <put name="body" value="/JSPROOT/reports/summary_report.jsp" type="page"></put>
        </definition>
</tiles-definitions>

  上面定义了2个view,一个report.main,一个report.summary

4.然后和原来一样,编写你自己的layout文件,及header,footer等....典型的一个layout如下:

<%@taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles"%>
<html>
<head>
<title>
<tiles:getAsString name="header"/>
</title>
</head>
<body bgcolor="#ffffff" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" onKeyPress="return killEnt();">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="2" align="justify">
      <tiles:insert attribute="header" flush="false" ignore="false">      </tiles:insert>
    </td>
  </tr>
  <tr>
    <td colspan="2" bgcolor="#000000" align="right">
     
    </td>
  </tr>
  <tr height="620">
    <td bgcolor="#030D97" align="Left" valign="Top" width="17%">
      <tiles:insert attribute="menu" flush="false" ignore="false">      </tiles:insert>
    </td>
    <td width="83%" style="vertical-align:top;">
      <table width="100%">
        <tr>
          <td style="vertical-align:top;padding-top:10px;padding-left:10px;">
            <tiles:insert attribute="body" flush="false" ignore="false">            </tiles:insert>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td>
      <tiles:insert attribute="footer" flush="false" ignore="false">      </tiles:insert>
    </td>
  </tr>
</table>
</body>
</html>

  注意:一定不能在f:view里面套f:view。也就是说你在layout.jsp不要用到JSF的标签来产生一些业务逻辑。实际上我们主要的逻辑也是在body里面实现的。在layout里面主要是定义一些文字,图片什么的。同样在header.jsp,footer.jsp,menu.jsp里面也只写html代码,不要用JSF标签。

5.编写两个jsp文件like this:

main_t.jsp:

<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>

<tiles:insert definition="report.main">
</tiles:insert>

summary_t.jsp:

<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>

<tiles:insert definition="report.summary">
</tiles:insert>

这一步是关键,如果理解到了这里,那你就可以轻松把tiles和jsf结合起来。原来在Struts我们配置的forward对象可以直接是tiles-defs.xml里面的一个view,但是在JSF里面不行。这里的navigation必须是定义到一个jsp文件,所以我们只有在这个文件里面再来插入tiles里面所定义的view。这样的坏处就是我们在tiles-defs里面定义的每一个view都必须有一个对应的想上面一样的jsp文件,而且在JSF里面配的navigation都必须是基于这个文件到的。注意:不只是to-view-id,from-view-id也必须是对应上面的这种文件,不能是body的jsp文件(不懂可以看第9步的配置)。

6.如果你都理解了,你可以不往下看了。。下面是为了上面的例子更完整而做的剩余步骤。

7.编写一个index.jsp

<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff">
<jsp:forward page="main_t.faces">                    //对应到上面第5步的文件
  <jsp:param name="" value=""/>
</jsp:forward>
</body>
</html>

8.编写2个tiles-defs.xml里面定义的body的jsp文件

report_main.jsp:

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<
%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<html>
<head>
<title>main</title>
<link rel="stylesheet" type="text/css" href="sworx_IE.css"/>
</head>
<body bgcolor="#ffffff">
<h1 align="center" class="header">Report</h1>
<f:view>
  <h:form>
        <p>
      <h:commandButton action="summary" value="Summary Report" styleClass="button" style="width:120">      </h:commandButton>
      <h:commandButton type="reset" value="Clear" styleClass="button" style="width:60">      </h:commandButton>
    </p>
  </h:form>
</f:view>
</body>
</html>

summary_report.jsp:

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<
%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<html>
<head>
<title>main</title>
<link rel="stylesheet" type="text/css" href="sworx_IE.css"/>
</head>
<body bgcolor="#ffffff">
<h1 align="center" class="header">Summary Report</h1>
</body>
</html>

9.配置face-config.xml:

...........................

<navigation-rule>
    <from-view-id>/JSPROOT/reports/main_t.jsp (注意:不是report_main.jsp,这样在有的IDE里面可能会报report_main.jsp有错,比如JB2005,不用管它)</from-view-id>
    <navigation-case>
      <from-outcome>summary</from-outcome>
      <to-view-id>/JSPROOT/reports/summary_t.jsp (不是summary_report.jsp)</to-view-id>
    </navigation-case>
</navigation-rule>

....................


好了。所有工作都作完了。哈哈,现在你同时拥有了tiles的布局灵活性和JSF在view层的强大表现力,还等什么,在下个项目中赶快试试吧。


  --相关文章--
· 漫步j2ee之jsp技术(1) (2007-04-13)
· 提升JSP应用程序的七大绝招 (2007-04-13)
· 如何在JSP中处理中文 (2007-04-13)
· 第一章 taglibnbsp;原理和实现 (2007-04-13)
· 用jsp动态输出excel文档和中文乱码问题的解决 (2007-04-13)
· 可以自动跳转到出错页面的servlet jsp框架 (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接