zoukankan      html  css  js  c++  java
  • Struts2(四)——页面相关内容

    上篇博客总结了数据流转各个方面的内容,这篇重点说一下框架对于界面上知识。

              一,说到页面,记得在总体介绍中,说到Struts2Struts1的一方面优势就是它支持更多的视图技术(FreemarkerVolicity),而,不仅仅是JSP。先简单看一下Freemarker吧!

               1,简单介绍:

                       FreeMarker是一个“模板引擎”,生成静态页面,XML等,一个基于模板生成文本输出的第三方工具。可以实现生成HTML网页,设计人员可以用它改变外观,而无需更改或重新编译代码,因为此应用将程序逻辑(Java程序)和网页设计(FreeMarker模板)隔开。运行时可以不依赖Web服务器。也不需要编译。效率比JSP高。文件的扩展名:.ftl   文件的存放位置,一般是在WebRoot目录下。看这张图:


     

              可以看出FreeMarker的主要思想是:模板+数据模型=输出。

              2,需要我们了解此知识,使用时具体语法,参考此文:Freemarker使用

              综上为页面相关内容的一些知识,主要是页面的跳转,下载跳转等,都是非常基础的知识,这里需要我们多看struts-default.xml文件中知识,通过了解其中的一些配置,以及其对应的类,是非常有意思的。

     

              二,框架中页面跳转问题,对应Servlet+JSP开发中的重定向和转发。框架提供了四种result结果的跳转方式,分别为dispatcher,chain,redirect,redirectAction,其中dispatcher为默认的,是转发到jsp页面的意思。这些信息在struts-default.xml文件中都有设置。

     

               1dispatcher:为框架默认的,表示转发到期望的jsp页面。由于框架提供了拦截器,每次执行action需要执行过滤器,如果非得用dispatcher来进行action转发时,需要我们在web.xml进行设置如下:

     

    1. <filter>  
    2.     <filter-name>struts2</filter-name>  
    3.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>        
    4. </filter>  
    5. <filter-mapping>  
    6.     <filter-name>struts2</filter-name>  
    7.     <url-pattern>/*</url-pattern>  
    8.     <dispatcher>REQUEST</dispatcher>  
    9.     <dispatcher>FORWARD</dispatcher>  
    10. </filter-mapping>  

               2,chain:专门提供Action之间进行转发操作的。表示同一次请求链。上边哪种情况很少使用的。设置如下:

     

                a,如果两个action在同一个命名空间下进行转发:直接指定另一个action的名称即可。

    1. <package name="example" namespace="/user" extends="struts-default">  
    2.             <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">  
    3.                 <result name="success" type="chain">test</result>  
    4.                 <result name="login">/login.jsp</result>  
    5.             </action>  
    6.               
    7.              <action name="test" class="com.ljh.struts2.action.TestAction" method="test">  
    8.                 <result name="test" type="dispatcher">/test.jsp</result>  
    9.              </action>  
    10.         </package>  

               b,如果两个action不在同一个命名空间下进行转发,需要给result指定参数:

    1. <package name="example" namespace="/user" extends="struts-default">  
    2.      <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">  
    3.          <result name="success" type="chain">  
    4.             <param name="namespace">/test</param<!-- 参数名称需要参考API-(ActionChainResult)文件的说明 -->  
    5.             <param name="actionName">test</param>  
    6.          </result>  
    7.          <result name="login">/login.jsp</result>  
    8.      </action>  
    9.  </package>  
    10.    
    11.  <package name="test" namespace="/test" extends="struts-default">  
    12.       <action name="test" class="com.ljh.struts2.action.TestAction" method="test">  
    13.          <result name="test" type="dispatcher">/test.jsp</result>  
    14.       </action>  
    15.  </package>  


             3,redirect:表示重定向到jsp页面,设置较简单: 

    1. <package name="example" namespace="/user" extends="struts-default">  
    2.        <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">  
    3.            <result name="success" type="redirect">/success.jsp</result>  
    4.            <result name="login">/login.jsp</result>  
    5.        </action>  
    6.    </package>  

               redirect也可以重定向到action,在重定向action时,不管action是否在同一个命名空间下,只要指定重定向action的完整路径即可,例如:

    1. <package name="example" namespace="/user" extends="struts-default">  
    2.       <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">  
    3.                          <!-- 路径指定时需要增加合法的扩展名,但是项目中的扩展名一旦改变会影响我们的路径配置。 -->  
    4.           <result name="success" type="redirect">/user/test.action</result>  
    5.           <result name="login">/login.jsp</result>  
    6.       </action>  
    7.         
    8.        <action name="test" class="com.ljh.struts2.action.TestAction" method="test">  
    9.           <result name="test" type="redirect">/test.jsp</result>  
    10.        </action>  
    11.   </package>  

     

             4redirectAction专门用来重定向Action的。这个的设置和chain,专门用来转发action的设置一样,不在演示。

              三,result中还有包括我们特殊的文件下载,文件下载就是服务器将资源文件以流的方式传递给浏览器。

     

             1,在配置文件以流的方式作为结果类型进行跳转,不同于上边的几种,例如:

    1. <result name="success" type="stream">  
    2.    <!-- 内容类型可以参照:CATALINA_HOMEconfweb.xml -->  
    3.    <param name="contentType">image/gif</param>  
    4.    <param name="inputName">imageStream</param>  
    5.    <param name="contentDisposition">attachment;filename="${filename}"</param>  
    6.    <param name="bufferSize">1024</param>  
    7. </result>   


             2,action中增加输入流属性,其名和配置文件中的要一样,一遍反射获取,还有就是文件名属性,

    1. private String filename ;//获取文件名  
    2.   
    3. private InputStream imageStream; // 读取下载的文件  
    4. //从WebRoot目录下读取文件         
    5. imageStream = ServletActionContext.getServletContext().getResourceAsStream("文件名");  

           3,当然下载时 ,我们会先生成excel表格,或者其他office文档,进行处理,这是就涉及到JAVAoffice的联合处理,这里给大家推荐一个很好用的第三方组件POI,进行对Office文档的生成。首先引进其jar包,这里几个简单例子:

    1.     //使用特殊的方式来操作Excle文档:(将生成的文档输出到缓冲区中)  
    2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    3.       
    4.     Workbook wb = getWorkBook();  
    5.       
    6.     wb.write(baos) ; //将文档对象数据生成到内存中(相当于存储到缓冲区中)  
    7.       
    8.   
    9.      imageStream = new ByteArrayInputStream(baos.toByteArray());  

     

    更多POI知识,请参考:POI百科     POI中文帮助文档

     综上为页面相关内容的一些知识,主要是页面的跳转,下载跳转等,都是非常基础的知识,这里需要我们多看struts-default.xml文件中知识,通过了解其中的一些配置,以及其对应的类,是非常有意思的。

  • 相关阅读:
    C#中datagridview单元格值改变实现模糊查找
    C#中建立treeView
    L2008 最长对称子串
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)
    GPLT团体程序设计天梯赛练习集 L1041~L1050
    GPLT团体程序设计天梯赛练习集 L1051~L1060
    GPLT团体程序设计天梯赛练习集 L1061~L1072
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)(热身赛)
    L2007 家庭房产 并查集
    利用反射把查询到的Table、Reader转换成List、Model
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4745780.html
Copyright © 2011-2022 走看看