熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

學會Tiles在JSF框架中的應用指南

2013-11-23 19:31:51  來源: Java核心技術 

  如果你還不知道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都不知道怎麼運轉那就不要浪費時間了
  
  把Struts裡面的strutsjar考到lib目錄下面
  
  在webxml裡面加上下面配置
  
  <servlet>
  <servletname>Faces Servlet</servletname>
  <servletclass>javaxfaceswebappFacesServlet</servletclass>
  <loadonstartup></loadonstartup>
  </servlet>
  <servlet>
  <servletname>TilesServet</servletname>
  <servletclass>orgapachestrutstilesTilesServlet</servletclass>
  <initparam>
  <paramname>definitionsconfig</paramname>
  <paramvalue>/WEBINF/tilesdefsxml</paramvalue>
  </initparam>
  <initparam>
  <paramname>definitionsparservalidate</paramname>
  <paramvalue>true</paramvalue>
  </initparam>
  <loadonstartup></loadonstartup>
  </servlet>
  
  藍色部分是你要加的注意上面的servlet的load順序
  
  添加tilesdefsxml到/WEBINF/下面這個配置文件和以前在struts裡面的沒有差別一個典型的配置如下
  
  <!DOCTYPE tilesdefinitions PUBLIC
  //Apache Software Foundation//DTD Tiles Configuration//EN
  configdtd>
  
  <tilesdefinitions>
  <definition name=reportmain path=/JSPROOT/templates/topLayoutjsp>
  <put name=header value=/JSPROOT/templates/headerjsp></put>
  <put name=menu value=/JSPROOT/templates/menujsp></put>
  <put name=footer value=/JSPROOT/templates/footerjsp></put>
  <put name=body value=/JSPROOT/reports/report_mainjsp></put>
  </definition>
  <definition name=reportsummary extends=reportmain>
  <put name=body value=/JSPROOT/reports/summary_reportjsp type=page></put>
  </definition>
  </tilesdefinitions>
  
  上面定義了個view一個reportmain一個reportsummary
  
  然後和原來一樣編寫你自己的layout文件及headerfooter等典型的一個layout如下
  
  <%@taglib uri=tiles prefix=tiles%>
  <html>
  <head>
  <title>
  <tiles:getAsString name=header/>
  </title>
  </head>
  <body bgcolor=#ffffff topmargin= leftmargin= marginwidth= marginheight= onKeyPress=return killEnt();>
  <table width=% border= cellpadding= cellspacing=>
  <tr>
  <td colspan= align=justify>
  <tiles:insert attribute=header flush=false ignore=false>   </tiles:insert>
  </td>
  </tr>
  <tr>
  <td colspan= bgcolor=# align=right>
  
  </td>
  </tr>
  <tr height=>
  <td bgcolor=#D align=Left valign=Top width=%>
  <tiles:insert attribute=menu flush=false ignore=false>   </tiles:insert>
  </td>
  <td width=% >
  <table width=%>
  <tr>
  <td >
  <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也就是說你在layoutjsp不要用到JSF的標簽來產生一些業務邏輯實際上我們主要的邏輯也是在body裡面實現的在layout裡面主要是定義一些文字圖片什麼的同樣在headerjspfooterjspmenujsp裡面也只寫html代碼不要用JSF標簽
  
  編寫兩個jsp文件like this
  
  main_tjsp:
  
  <%@ taglib uri=tiles prefix=tiles %>
  
  <tiles:insert definition=reportmain>
  </tiles:insert>
  
  summary_tjsp:
  
  <%@ taglib uri=tiles prefix=tiles %>
  
  <tiles:insert definition=reportsummary>
  </tiles:insert>
  
  這一步是關鍵如果理解到了這裡那你就可以輕松把tiles和jsf結合起來原來在Struts我們配置的forward對象可以直接是tilesdefsxml裡面的一個view但是在JSF裡面不行這裡的navigation必須是定義到一個jsp文件所以我們只有在這個文件裡面再來插入tiles裡面所定義的view這樣的壞處就是我們在tilesdefs裡面定義的每一個view都必須有一個對應的想上面一樣的jsp文件而且在JSF裡面配的navigation都必須是基於這個文件到的注意不只是toviewidfromviewid也必須是對應上面的這種文件不能是body的jsp文件(不懂可以看第步的配置)
  
  如果你都理解了你可以不往下看了下面是為了上面的例子更完整而做的剩余步驟
  
  編寫一個indexjsp
  
  <html>
  <head>
  <title>
  index
  </title>
  </head>
  <body bgcolor=#ffffff>
  <jsp:forward page=main_tfaces>          //對應到上面第步的文件
  <jsp:param name= value=/>
  </jsp:forward>
  </body>
  </html>
  
  編寫個tilesdefsxml裡面定義的body的jsp文件
  
  report_mainjsp:
  
  <%@taglib uri= prefix=f%>
  <%@taglib uri= prefix=h%>
  <html>
  <head>
  <title>main</title>
  <link rel=stylesheet type=text/css />
  </head>
  <body bgcolor=#ffffff>
  <h align=center class=header>Report</h>
  <f:view>
  <h:form>
  <p>
  <h:commandButton action=summary value=Summary Report styleClass=button >   </h:commandButton>
  <h:commandButton type=reset value=Clear styleClass=button >   </h:commandButton>
  </p>
  </h:form>
  </f:view>
  </body>
  </html>
  
  summary_reportjsp
  
  <%@taglib uri= prefix=f%>
  <%@taglib uri= prefix=h%>
  <html>
  <head>
  <title>main</title>
  <link rel=stylesheet type=text/css />
  </head>
  <body bgcolor=#ffffff>
  <h align=center class=header>Summary Report</h>
  </body>
  </html>
  
  配置faceconfigxml
  
  <navigationrule>
  <fromviewid>/JSPROOT/reports/main_tjsp (注意不是report_mainjsp這樣在有的IDE裡面可能會報report_mainjsp有錯比如JB不用管它)</fromviewid>
  <navigationcase>
  <fromoutcome>summary</fromoutcome>
  <toviewid>/JSPROOT/reports/summary_tjsp (不是summary_reportjsp)</toviewid>
  </navigationcase>
  </navigationrule>
  
  好了所有工
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27040.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.