Struts2和freemarker标签循环list以及获取下标值

合集下载

struts2

struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>

Freemarkerlist的简单使用

Freemarkerlist的简单使用

Freemarkerlist的简单使用Freemarker是一种用于Java和Java平台上的模板引擎。

它具有简单易用、快速和灵活的特点,被广泛应用于Web开发中的视图渲染、页面生成和电子邮件模板等场景。

其中,Freemarker提供了对列表(List)的强大支持,可以通过简单的方式实现列表的遍历、分页和过滤等功能。

本文将详细介绍Freemarker中列表的简单使用。

### 1. 引入Freemarker依赖在使用Freemarker之前,需要在项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)中引入Freemarker的依赖。

以下是Maven的示例配置:```xml<dependencies><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency></dependencies>```### 2. 创建Freemarker配置在使用Freemarker之前,需要创建Freemarker的配置对象,用于指定模板文件的位置和其他相关设置。

如下所示:```javaimport freemarker.template.Configuration;import freemarker.template.TemplateExceptionHandler;// 创建Freemarker配置Configuration cfg = newConfiguration(Configuration.VERSION_2_3_30);cfg.setClassForTemplateLoading(Main.class, "/templates");cfg.setDefaultEncoding("UTF-8");cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RET HROW_HANDLER);```这里的示例代码中,使用`setClassForTemplateLoading(`方法指定模板文件所在的类路径(相对于类的所在位置)。

ftl编辑器(freemarker)的使用和说明

ftl编辑器(freemarker)的使用和说明

一、准备工作1.1 下载文件可以从/站点下载最新的freemarker.jar包(目前最新版本是2.3.18)与eclipse插件(最新版本是0.9.14)。

1.2 安装eclipse插件将下载来的eclipse插件解压缩到本地磁盘,更改hudson.freemarker_ide_0.9.14文件夹中的freemarker-2.3.6.jar文件更改成最新版本的freemarker-2.3.18.jar,并且将META-INF/MANIFEST.MF文件中的Bundle-ClassPath属性值修改为freemarker-2.3.18.jar。

最后将hudson.freemarker_ide_0.9.14放到eclipse的plugins目录中,完成eclipse 插件的安装。

1.3 freemarker文档下载从/官方网站中下载帮助文档(也有中文的手册)二、freemarker的使用2.1 简介2.1.1 FTL tag标签由于freemarker tag标签是属于freemarker的指令,它们仅仅是freemarker 处理过程中的信息,而不会输出到页面上,所以它们与html标签有一些区别。

这些标签都是以#号开头,如<#import "/public/work_public.ftl" as public>。

但用户自定义的标签是以@符号开头,如在freemarker中使用struts标签:<@s.if test="results!=null&&results.size()!=0">注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在FTL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法:<#if <#include 'foo'>='bar'>...</#if>2.1.2 注释freemarker的文档注释与html相似,但它是以<#--和-->来分割的。

遍历list的几种方式

遍历list的几种方式

遍历list的几种方式遍历list是在编程中常见的操作之一,能够帮助我们访问列表中的每个元素。

在这篇文章中,我们将详细介绍几种常见的遍历list的方式,并对每种方式进行逐一分析。

首先,我们将从最基础的方式开始,逐渐深入研究每种遍历list的方式的原理和使用场景。

1. 使用for循环遍历listfor循环是一种简单而常见的遍历list的方式。

它的语法结构如下:for item in my_list:# 在这里进行操作这个循环会依次将列表中的每个元素赋给变量`item`,然后执行循环体中的操作。

我们可以在循环体中对每个元素进行特定的操作,比如打印元素的值或者对元素进行计算。

for循环的优点是简洁明了,且可以直接操作list中的每个元素。

然而,它并不能提供索引位置的信息,有时可能需要使用其他方法。

2. 使用while循环和索引遍历list当我们需要获取元素的索引位置时,可以使用while循环结合索引进行遍历。

以下是实现该方式的一种方法:index = 0while index < len(my_list):item = my_list[index]# 在这里进行操作index += 1这个循环会在遍历过程中不断增加索引`index`的值,从而逐一获取list 中的元素并执行相应的操作。

由于我们显式地操作索引,因此可以根据需要灵活地控制循环逻辑。

这种遍历方式特别适用于需要根据元素的索引位置执行特定操作的情况。

例如,我们可以根据索引位置筛选出特定范围的元素进行处理。

3. 使用enumerate函数遍历list如果想在for循环中同时获得索引位置和元素值,可以使用`enumerate()`函数。

这个函数能够返回一个包含索引位置和元素值的元组,从而实现同时获取两者的目的。

以下是使用`enumerate()`函数遍历list的示例代码:for index, item in enumerate(my_list):# 在这里进行操作这种方式可以简化代码,同时提供了索引位置和元素值的信息,使程序更易读且更具可读性。

FreeMarker指令

FreeMarker指令

FreeMarker指令FreeMarker指令的组成:* 文本:直接输出的部分。

* 注释:即<#--...-->格式部分,不会输出。

* 插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出。

* FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。

1>.FTL指令规则:开始标签:<#directivename parameters>结束标签:</#directivename>空标签:<#directivename parameters/>注:如果某指令是一个用户自定义指令时,应将#符合改为@符合。

2>.插值规则:通用插值:${expr}数字格式化插值:#{expr}或#{expr,format}1>.介绍通用插值:${expr}* 插值结果为字符串值:直接输出表达式结果.* 插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出。

* 插值结果为日前值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出。

* 插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出。

例子1:<#setting number_format="currency"/><#assign answer=42/> //输出结果${answer} //$42.00${answer?string} //$42.00${answer?string.number} //42${answer?string.currency}//$42.00${answer?string.percent}//4,200%例子2:<#assign lastUpdate=42/>${lastUpdate?string("yyyy-MM-dd HH:mm:ss zzzz")}${lastUpdate?string("EEE,MMM d, ''yy")}${.................("EEEE,MMM dd,yyyy, hh:mm:ss a '('zzz')'")}输出结果如下:2003-04-08 21:24:44 Pacific Daylight TimeTue,Apr 8,'03Tuesday,April 08,2003,09:24:44 PM (PDT)例子3:<#assign foo=true/>${foo?string("yes","no")} //输出结果:yes2>介绍数字化插值mX:小数部分最小X位。

struts2

struts2

/topic/128973struts2表单标签1、struts资源文件中文解决方法在命令行中输入以下命令native2ascii -encoding gb2312 ApplicationResources.properties ApplicationResourcesgbk.properties第一个文件为资源文件,第二个为新生成的文件,将新生成的文件拷入工程就可以了2、开发struts2流程1.创建web工程2.拷贝commons-fileupload-1.2.1.jar,commons-logging-1.0.4.jar,freemarker-2.3.13.jar,ognl-2.6.11.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,放入web-inf--lib中3.在web.xml文件中添加struts2的核心Filter,过滤客户端发送过来的请求,代码如下<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>org.apache.struts2.dispatcher.FilterDispatcher为struts2中提供的一个控制器4.创建struts.xml文件,放在src目录下.代码如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"></package></struts>5.在src目录下创建一个类,创建几个属性及对应的get,set方法6.创建public String execute() throws Exception方法,7.在struts.xml文件中添加如下代码:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result></action></package></struts>3、创建拦截器:1.创建类继承AbstractInterceptor,覆盖intercept方法,代码如下public String intercept(ActionInvocation invocation) throws Exception {LoginAction action=(LoginAction)invocation.getAction();String result=invocation.invoke();return null;}2.在struts.xml文件中配置如下<package name="strutsqs" extends="struts-default"><interceptors><interceptor name="myInterceptor" class="ers.interceptor.LoginInterceptor"> <param name="name">简单拦截器</param></interceptor></interceptors><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result><result name="input">/Login.jsp</result><interceptor-ref name="myInterceptor"></interceptor-ref></action></package>也可以创建拦截器栈<interceptors><interceptor name="myinterceptor1"class="com.haitian.bbs.interceptor.MyInterceptor"></interceptor> <interceptor name="myinterceptor2"class="com.haitian.bbs.interceptor.MyInterceptor2"></interceptor> <interceptor-stack name="stack1"><interceptor-ref name="myinterceptor2"></interceptor-ref><interceptor-ref name="myinterceptor1"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors>4.标签中引用资源文件内容<s:textfield name="age" key="regist.age" value="%{getText('regist.password')}"></s:textfield><s:select list=”#{‘1’:getText(‘sex.man’),’0’:getText(‘sex.women’)}”<s:text name=”bel”/>5.创建资源文件在src下创建messageResource_zh_CN.properties文件在src下创建struts.properties文件,添加struts.custom.i18n.resources=messageResource_zh_CN 6.Action中访问servlet APIActionContext ctx=ActionContext.getContext();ctx.getApplication()获得application对象ctx.put(“”,””);//相当于request.setAttribute(“”,””);ctx.getSession()//获得session对象get(Object key);//类似于调用HttpServletRequest的getAttribute(String name);方法Map getApplication();返回一个Map对象,该对象模拟了应该的ServletContext实例Map getSession();返回一个Map对象,该Map对象模拟了HttmpSession实例Map getParameters();获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap方法Void setSession(Map session);直接传入一个Map实例,将实例里的key-value对转换成session的属性名\属性值HttpServletRequest request=ServletActionContext.getRequest();7.Action访问资源文件Action 继承ActionSupport调用this.getText(“ername”);Jsp访问资源文件<s:text name=”bel”/>8.资源文件_各国代码资源文件命名格式:baseName_language_country.propertiesLocale[] localeList=Locale.getAvailableLocales();for(int i=0;i<localeList.length;i++){System.out.println(localeList[i].getDisplayCountry()+”=”+localeList[i].getCountry()+””+localeList[i ].getDisplayLanguage()+”=”+localeList[i].getLanguage());}9.将struts.xml分开在struts.xml中添加如下代码,将其它配置文件导入<struts><include file=”struts-part1.xml”/>..</struts>被包含的配置文件是标准的struts2配置文件,一样包含dtd 信息、strut2配置文件的根元素,此时struts.xml文件中不能再定义action10全局结果result<global-results><result name="">/te.jsp</result></global-results>11模型驱动1创建一个JavaBean,生成setter,getter方法2创建action类实现ModelDriven接口12.创建拦截器1创建类继承AbstractInterceptor,覆盖intercept(ActionInvocation invocation)方法2. ActionContext ac=arg0.getInvocationContext();Map session=ac.getSession();获得session对象Object obj=session.get(“CURRENTUSERBEAN”);//获得session中是否存在此对象If(obj==null)没有登陆过Return “login”;ElseReturn invocation.invoke();3.LoginAction la=(LoginAction)invocation.getAction();获得被拦截的Action 实例4.String result=invocation.invoke();调用execute方法,将拦截方法返回的字符串做为拦截器的返回值或者返回其它字符串,此字符串与struts.xml文件中的result标签中的结果对应。

struts2中struts.xml文件详解

struts2中struts.xml文件详解

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
</action>
</package>
</struts>
上面代码的两个动作的class属性都指向同一个类,name为这个类起了两个动作别名:test和my。在动作my中,使用了method属性指定要要运行的方法名为my。
在MyAction类中必须要有my方法,代码如下:
<struts>
<package name="demo" extends="struts-default"
>
<action name="test" class="action.MyAction">
</action>
<action name="my" class="action. MyAction" method="my">
<?xml version="1.0" encoding="UTF-8" ?>

Apache Struts 2 教程(PDF)说明书

Apache Struts 2 教程(PDF)说明书

About the T utorialApache Struts 2 is an elegant, extensible framework for creating enterprise-ready Java web applications. This framework is designed to streamline the full development cycle from building, to deploying and maintaining applications over time. Apache Struts 2 was originally known as Web Work 2.This tutorial will teach you, how to use Apache Struts for creating enterprise-ready Java web applications in simple and easy steps.AudienceThis tutorial is designed for Java programmers who are interested to learn the basics of Struts 2.x framework and its applications.PrerequisitesBefore proceeding with this tutorial, you should have a good understanding of the Java programming language. A basic understanding of MVC Framework and JSP or Servlet is very helpful.Disclaimer & CopyrightCopyright 2015 by Tutorials Point (I) Pvt. Ltd.All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute, or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher. We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness, or completeness of our website or its contents including this tutorial. If you discover any errorsonourwebsiteorinthistutorial,******************************************iT able of ContentsAbout the Tutorial (i)Audience (i)Prerequisites (i)Disclaimer & Copyright (i)Table of Contents .................................................................................................................................. i i STRUTS 2 - BASIC MVC ARCHITECTURE (1)The Model (2)The View (2)The Controller (2)STRUT 2 – OVERVIEW (3)Struts 2 Framework Features (3)Struts 2 Disadvantages (4)ENVIRONMENT SETUP (5)Step 1 - Setup Java Development Kit (JDK) (5)Step 2 - Setup Apache Tomcat (5)Step 3 - Setup Eclipse (IDE) (7)Step 4 - Setup Struts2 Libraries (8)STRUTS 2 – ARCHITECTURE (10)Request Life Cycle (11)STRUTS 2 – EXAMPLES (12)Create a Dynamic Web Project (13)Create Action Class (14)Create a View (15)Create Main Page (16)iiTo Enable Detailed Log (18)Procedure for Executing the Application (19)STRUTS 2 – CONFIGURATION (22)The web.xml File (22)The Struts.xml File (23)The Struts-config.xml File (25)The Struts.properties File (27)STRUTS 2 – ACTIONS (29)Create Action (29)Create a View (31)Execute the Application (33)Create Multiple Actions (35)STRUTS 2 – INTERCEPTORS (37)Struts 2 Framework Interceptors (37)How to Use Interceptors? (39)Create Custom Interceptors (40)Create Interceptor Class (41)Create Action Class (42)Create a View (43)Create Main Page (43)Configuration Files (44)Stacking Multiple Interceptors (46)STRUTS 2 – RESULT TYPES (48)The Dispatcher Result Type (48)iiiThe Redirect Result Type (50)STRUTS 2 – VALUE STACK / OGNL (52)The Value Stack (52)The OGNL (53)ValueStack/OGNL Example (54)Create Views (56)Configuration Files (57)STRUTS 2 – FILE UPLOADS (60)Create View Files (60)Create Action Class (61)Configuration Files (63)Error Messages (67)STRUTS 2 – DATABASE ACCESS (69)Create Action (69)Create Main Page (71)Create Views (72)Configuration Files (73)STRUTS 2 – SENDING EMAIL (77)Create Action (77)Create Main Page (80)Create Views (81)Configuration Files (82)STRUTS 2 - VALIDATIONS (86)Create Main Page (86)ivCreate Action (87)Configuration Files (88)How this Validation Works? (91)Xml Based Validation (92)STRUTS 2 - LOCALIZATION (95)Resource Bundles (95)Access the messages (96)Localization Example (96)STRUTS 2 – TYPE CONVERTION (104)STRUTS 2 – THEMES & TEMPLATES (110)Selecting Themes (111)How a Theme Works? (112)Creating New Themes (112)STRUTS 2 – EXCEPTION HANDLING (115)Global Exception Mappings (120)STRUTS 2 – ANNOTATIONS (122)Create Main Page (122)Create Views (123)Create Action (124)Configuration Files (125)STRUTS 2 – CONTROL TAGS (130)The If and Else Tags (130)If and Else Tags – Detailed Example (130)The Iterator Tags (134)vThe Iterator Tags – Detailed Example (135)The Merge Tag (142)The Merge Tag – Detailed Example (142)The Append Tag (147)The Append Tag – Detailed Example (148)The Generator Tag (153)The Generator Tag – Detailed Example (154)STRUTS 2 – DATA TAGS (158)The Action Tag (158)The Action Tag – Detailed Example (158)The Include Tag (164)The Include Tag – Detailed Example (164)The Bean Tag (168)The Bean Tag – Detailed Example (169)The Date Tag (173)The Date Tag - Detailed Example (173)The Param Tag (176)The Param Tag – Detailed Example (177)The Property Tag (181)The Property Tag – Detailed Example (181)The Push Tag (185)The Push Tag – Detailed Example (186)The Set Tag (190)The Set Tag – Detailed Example (190)The Text Tag (195)The Text Tag – Detailed Example (195)viThe URLTag (199)STRUTS 2 – THE FORM TAGS (204)Simple UI Tags (204)Group UI Tags (206)STRUTS 2 – THE AJAX TAGS (211)STRUTS 2 & SPRING INTEGRATION (214)STRUTS 2 & TILES INTEGRATION (220)STRUTS 2 & HIBERNATE (226)Database Setup (226)Hibernate Configuration (226)Envrionment Setup (227)Hibernate Classes (228)Action Class (231)Struts Configuration (234)viiStruts 2 1M odel V iew C ontroller or MVC as it is popularly called, is a software design pattern for developing web applications. A Model View Controller pattern is made up of the following three parts:∙Model - The lowest level of the pattern which is responsible for maintaining data. ∙View - This is responsible for displaying all or a portion of the data to the user. ∙ Controller - Software Code that controls the interactions between the Model and View. MVC is popular as it isolates the application logic from the user interface layer and supports separation of concerns. Here the Controller receives all requests for the application and then works with the Model to prepare any data needed by the View. The View then uses the data prepared by the Controller to generate a final presentable response. The MVC abstraction can be graphically represented as follows.STRUTS 2 - BASIC MVC ARCHITECTUREStruts 2The ModelThe model is responsible for managing the data of the application. It responds to the request from the view and it also responds to instructions from the controller to update itself.The ViewIt means presentation of data in a particular format, triggered by a controller's decision to present the data. They are script-based templating systems like JSP, ASP, PHP and very easy to integrate with AJAX technology.The ControllerThe controller is responsible for responding to the user input and perform interactions on the data model objects. The controller receives the input, it validates the input and then performs the business operation that modifies the state of the data model.Struts2 is a MVC based framework. In the coming chapters, let us see how we can use the MVC methodology within Struts2.2Struts 2 3 Struts2 is a popular and mature web application framework based on the MVC design pattern. Struts2 is not just a new version of Struts 1, but it is a complete rewrite of the Struts architecture.The Webwork framework initially started with Struts framework as the basis and its goal was to offer an enhanced and improved framework built on Struts to make web development easier for the developers.After a while, the Webwork framework and the Struts community joined hands to create the famous Struts2 framework.Struts 2 Framework FeaturesHere are some of the great features that may force you to consider Struts2:∙ Pojo Forms and Pojo Actions - Struts2 has done away with the Action Forms that were an integral part of the Struts framework. With Struts2, you can use any POJO to receive the form input. Similarly, you can now see any POJO as an Action class.∙ Tag Support - Struts2 has improved the form tags and the new tags which allow the developers to write less code.∙ Ajax Support - Struts2 has recognized the take over by Web2.0 technologies, and has integrated AJAX support into the product by creating AJAX tags, this function is very similar to the standard Struts2 tags.∙ Easy Integration - Integration with other frameworks like Spring, Tiles and SiteMesh is now easier with a variety of integration available with Struts2.∙ Template Support - Support for generating views using templates.∙ Plugin Support - The core Struts2 behavior can be enhanced and augmented by the use of plugins. A number of plugins are available for Struts2.∙ Profiling - Struts2 offers integrated profiling to debug and profile the application. In addition to this, Struts also offers integrated debugging with the help of built in debugging tools.∙ Easy To Modify Tags - Tag markups in Struts2 can be tweaked using Freemarker templates. This does not require JSP or java knowledge. Basic HTML, XML and CSS knowledge is enough to modify the tags.∙Promote Less Configuration - Struts2 promotes less configuration with the help of using default values for various settings. You don't have to configure something unless it deviates from the default settings set by Struts2.STRUT 2 – OVERVIEWStruts 2 ∙View Technologies- Struts2 has a great support for multiple view options (JSP, Freemarker, Velocity and XSLT)Listed above are the Top 10 features of Struts 2 which makes it as an Enterprise ready framework.Struts 2 DisadvantagesThough Struts 2 comes with a list of great features, there are some limitations of the current version - Struts 2 which needs further improvement. Listed are some of the main points:∙Bigger Learning Curve- To use MVC with Struts, you have to be comfortable with the standard JSP, Servlet APIs and a large & elaborate framework.∙Poor Documentation- Compared to the standard servlet and JSP APIs, Struts has fewer online resources, and many first-time users find the online Apache documentation confusing and poorly organized.∙Less Transparent - With Struts applications, there is a lot more going on behind the scenes than with normal Java-based Web applications which makes it difficult to understand the framework.Final note, a good framework should provide generic behavior that many different types of applications can make use of it.Struts 2 is one of the best web frameworks and being highly used for the development of Rich Internet Applications (RIA).4Struts 2 5Our first task is to get a minimal Struts 2 application running. This chapter will guide you on how to prepare a development environment to start your work with Struts 2. I assume that you already have JDK (5+), Tomcat and Eclipse installed on your machine. If you do not have these components installed, then follow the given steps on fast track: Step 1 - Setup Java Development Kit (JDK)You can download the latest version of SDK from Oracle's Java site: Java SE Downloads . You will find instructions for installing JDK in downloaded files, follow the given instructions to install and configure the setup. Finally, set PATH and JAVA_HOME environment variables to refer to the directory that contains java and javac, typically java_install_dir/bin and java_install_dir respectively.If you are running Windows and installed the SDK in C:\jdk1.5.0_20, you should be inputting the following line in your C:\autoexec.bat file.Alternatively, on Windows NT/2000/XP:∙ You can right-click on My Computer, Select Properties, then Advanced, then Environment Variables. Then, you would update the PATH value and press the OK button.∙On Unix (Solaris, Linux, etc.), if the SDK is installed in /usr/local/jdk1.5.0_20 and you use the C shell, you would put the following into your .cshrc file. Alternatively, if you use an Integrated Development Environment (IDE) like Borland JBuilder, Eclipse, IntelliJ IDEA, or Sun ONE Studio, compile and run a simple program to confirm that the IDE knows where you installed Java, otherwise do proper setup as per the given document of IDE.Step 2 - Setup Apache T omcatYou can download the latest version of Tomcat from /. Once you downloaded the installation, unpack the binary distribution into a convenient location. For example in C:\apache-tomcat-6.0.33 on windows, or /usr/local/apache-tomcat-6.0.33 on Linux/Unix and create CATALINA_HOME environment variable pointing to these locations.ENVIRONMENT SETUPYou can start Tomcat by executing the following commands on windows machine, or you can simply double click on startup.batTomcat can be started by executing the following commands on Unix (Solaris, Linux, etc.) machine:After a successful startup, the default web applications included with Tomcat will be available by visiting http://localhost:8080/. If everything is fine, then it should display the following result:Further information about configuring and running Tomcat can be found in the documentation included here, as well as on the Tomcat website: 67 Tomcat can be stopped by executing the following commands on windows machine:Tomcat can be stopped by executing the following commands on Unix (Solaris, Linux, etc.) machine:Step 3 - Setup Eclipse (IDE)All the examples in this tutorial are written using Eclipse IDE. I suggest that, you have the latest version of Eclipse installed in your machine.To install EclipseDownload the latest Eclipse binaries from /downloads/. Once you download the installation, unpack thebinary distribution into a convenient location.For example in C:\eclipse on windows, or /usr/local/eclipse on Linux/Unix and finally set PATH variable appropriately. Eclipse can be started by executing the following commands on windows machine, or you can simply double click on eclipse.exeEclipse can be started by executing the following commands on Unix (Solaris, Linux, etc.) machine:After a successful startup, if everything is fine, it should display the following result:Step 4 - Setup Struts2 LibrariesNow if everything is fine, then you can proceed to setup your Struts2 framemwork. Following are the simple steps to download and install Struts2 on your machine.∙Make a choice whether you want to install Struts2 on Windows, or Unix and then proceed to the next step to download .zip file for windows and .tz file for Unix.∙Download the latest version of Struts2 binaries from /download.cgi.∙At the time of writing this tutorial, I downloaded struts-2.0.14-all.zip and when you unzip the downloaded file it will give you directory structure inside C:\struts-2.2.3 as follows.8Second step is to extract the zip file in any location, I downloaded & extracted struts-2.2.3-all.zip in c:\folder on my Windows 7 machine so that I have all the jar files into C:\struts-2.2.3\lib. Make sure you set your CLASSPATH variable properly otherwise you will face problem while running your application.9End of ebook previewIf you liked what you saw…Buy it from our store @ https://10。

freemark语法,获取变量,获取对象变量,设置变量默认值

freemark语法,获取变量,获取对象变量,设置变量默认值
<font color="red"> 少年</font> </#if> 展示结果:
成年
(4) switch --常与case break default一起使用 参数可为字符串 格式:<#switch var> <#case 条件1> 输出
<#break> <#case 条件2>
输出
<#break> <#default>
java.sql.Date time = new Date().getTime(); java.sql.Date datetime = new Date().getTime(); 在页面中获取变量:
date获取:<font color="red"> ${date?string('yyyy-MM-dd')} </font><br> time获取:<font color="red"> ${date?string('HH:mm:ss')} </font><br> datetime获取:<font color="red"> ${date?string('yyyy-MM-dd HH:mm:ss')} </font><br> 展示结果:
展示结果: String获取:世界你好 int获取:10 boolean获取:yes
(2)${var!} 适用类型:对 null 或者不存在的对象进行取值,可以设置默认值,例:${var!'我是默认值'} 即,有值时显示正常值,无值时

freemarker循环表格

freemarker循环表格

一、介绍在软件开发中,经常需要用到模板引擎来生成动态内容,其中freemarker是一款常用的模板引擎之一。

在freemarker中,循环表格是非常常见的需求,可以用来展示多条数据或者复杂的结构。

本文将介绍如何在freemarker中实现循环表格的功能,包括基本语法和示例代码。

二、基本语法在freemarker中,使用循环表格需要借助<#list>标签。

下面是<#list>标签的基本语法:```html<#list sequence as item>...</#list>```其中,sequence为要遍历的集合或者数组,item为当前遍历的元素。

在<#list>标签内部可以使用item来引用当前元素。

三、循环表格示例假设有一个名为employeeList的员工列表,包含员工的尊称、工号和部门信息。

我们可以使用freemarker来展示这个员工列表,代码如下:```html<table><tr><th>尊称</th><th>工号</th><th>部门</th></tr><#list employeeList as employee><tr><td>${}</td><td>${employee.id}</td><td>${employee.department}</td></tr></#list></table>```在上面的示例中,我们使用<#list>标签遍历employeeList,并依次输出每个员工的尊称、工号和部门信息,生成了一个员工列表的表格。

四、嵌套循环表格有时候需要在表格中嵌套循环来展示更复杂的数据结构。

Struts2介绍

Struts2介绍

Struts2集成指南关于Struts2Struts是Apache软件基金会(ASF)赞助的一个开源项目。

它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。

它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。

Struts,a history在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。

因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。

为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。

后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。

Craig McClanahan2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。

至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1与Struts 2。

Struts1 vs. Struts2侵入性Struts 1在编程方面是面向抽象类编程,而不是面向接口编程。

Struts 1要求自定义Action 类继承一个特定的抽象基类Action。

另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。

struts2

struts2
struts核心 包
加载struts2
要使用struts2,必须在web.xml中进行配置
以过滤器的形式加载 struts2
过滤器所在包: org.apache.struts2. dispatcher.FilterDi spatcher
加载struts2
以过滤器的形式加载struts2
struts2以过滤器的形式加载到工程中,在web.xml中配置: <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
struts2中的命名空间起到模块化的作用。这个包下 的所有Action(请求的处理类),都应该以: /[命名空间名]/[Action名]来访问 命名空间的名字都应该以“/”开头,如果不配置命名 空间,则默认的就是namespace=“/”。 一个包下不能存在名字相同的Action
struts2常用配置-Action配置
name属性配置Action的名字
class属性配置Action类的完整类路径,说明 用哪个类处理提交的请求。
struts2常用配置-Action配置
LoginAction.java public class LoginAction extends ActionSupport { private String userName; private String password; public void setUserName(String userName) { erName = userName; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { return SUCCESS; } } 每个请求处理类必须继 承ActionSupport 对应页面表单元素名 对应的表单元素名必须 给出set方法 处理请求的方法。方法 名默认为execute struts2中,所提交的请求 应以.action结尾

关于在freemarker模板中遍历数据模型ListJavaBean的经验

关于在freemarker模板中遍历数据模型ListJavaBean的经验

关于在freemarker模板中遍历数据模型ListJavaBean的经验本⽂采⽤简单的servlet作为后台处理数据的⼯具,前台使⽤freemarker的ftl模板作为输出⼯具,简单说明怎样将封装有实体类对象的List集合注⼊到ftl模板中并且成功的在遍历显⽰出来,之前在⽹上找了很多这⽅⾯的资料,但是都没有解决这个问题,所以⾃⼰就从头认真的研读的⼀番freemarker的API⽂档,阅读了相关的类和接⼝的功能说明,终于找到了突破⼝,在这⾥写出来供和我有相同经历的孩纸(初学者)使⽤:⾸先看我写的domain实体类:News.javapublic class News {private Integer news_id;private String news_title;private String news_publish_date;private String news_url;public Integer getNews_id() {return news_id;}public void setNews_id(Integer news_id) {this.news_id = news_id;}.....以下的set和get⽅法都省略..接着看我写的newsSql.xml⽂件中查询所有News对象的并返回List<News>或者Map<String,News>型数据的配置信息:<typeAlias alias="news" type="cn.domain.News"/><resultMap class="news" id="getMap"><result property="news_id" column="news_id"/><result property="news_title" column="news_title"/><result property="news_publish_date" column="news_publish_date"/><result property="news_url" column="news_url"/></resultMap><select id="queryAllNews" resultMap="getMap">select *from news</select>下⾯是⾃⼰第⼀次写的NewsListServlet代码:public class NewsListServlet extends HttpServlet {private static final long serialVersionUID = 1L;private NewsDao dao;private Configuration cfg;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");dao = new NewsDao();List<News> newslist = dao.getAllNews();Map<String,List<News>> map=new HashMap<String, List<News>>();map.put("newslist",newslist);cfg = new Configuration();cfg.setServletContextForTemplateLoading(this.getServletContext(),"/ftl");Template template = cfg.getTemplate("newsList.ftl");try {template.process(map,response.getWriter());} catch (TemplateException e) {e.printStackTrace();}}}下⾯是newslist.ftl模板代码:<html><div style="background-color:#AABBCD"><table style="border:0px"><tr style="border:0px" align="center"><td colspan="4">以下是今天的主要新闻</td></tr><tr align="center"><td>编号</td><td>标题</td><td>发布时间</td><td>操作</td></tr><#if newslist?exists ><#list newslist as news><tr align="center"><td>${news.news_id}</td><td align="left">${news.news_title}</td><td>${news.news_publish_date}</td><td><a href="${news.news_url}">查看详情</a></td></tr></#list></#if></table></div></html>但是运⾏时会出现下⾯的异常信息,着实让⼈很头疼:freemarker.template.TemplateModelException: Don't know how to present an object of this type to a template: cn.domain.Newsat freemarker.template.SimpleObjectWrapper.handleUnknownType(SimpleObjectWrapper.java:139)at freemarker.template.SimpleObjectWrapper.wrap(SimpleObjectWrapper.java:116)at freemarker.template.WrappingTemplateModel.wrap(WrappingTemplateModel.java:131)at freemarker.template.SimpleSequence.get(SimpleSequence.java:197)at freemarker.template.IteratorBlock$Context.runLoop(IteratorBlock.java:163)at freemarker.template.Environment.visit(Environment.java:316)at freemarker.template.IteratorBlock.accept(IteratorBlock.java:94)at freemarker.template.Environment.visit(Environment.java:180)at freemarker.template.ConditionalBlock.accept(ConditionalBlock.java:78)at freemarker.template.Environment.visit(Environment.java:180)at freemarker.template.MixedContent.accept(MixedContent.java:91)at freemarker.template.Environment.visit(Environment.java:180)at freemarker.template.Environment.process(Environment.java:166)at freemarker.template.Template.process(Template.java:238)这⾥我声明⼀下,数据的封装和传递绝对没有问题,这个异常信息的关键是:Don't know how to present an object of this type to a template: cn.domain.News⽆法引述新闻类对象到模版,也就是说模板不认识list⾥⾯的数据是News对象,所以⽆法通过news.news_title来访问属性对象到这⾥我想⼤家明⽩我说的是什么意思了吧,通过查询API⽂档,可以容易看到Template.process()函数有两种形式,⼀个是含有两个参数的,⽽另⼀个则含有三个参数,他们分别为:void freemarker.template..process( dataModel, out) throws ,void freemarker.template..process( dataModel, out, wrapper) throws ,其实⼆者没什么⼤的区别,只是第⼆个⽅法⽐第⼀个多增加了⼀个 wrapper参数⽽已,那个增加这个参数有什么作⽤呢?答案是:第⼀个⽅法中默认了 wrapper参数是ObjectWrapper.SIMPLE_WRAPPER型的,但是在我们的情况下需要另⼀种类型,也即:ObjectWrapper.BEANS_WRAPPER,观看英⽂单词也理解是什么意思了吧,再看看官⽅的⽂档说明:An that exposes the object methods and JavaBeans properties as hash elements, and has custom handling for Java -s, -s, etc. It doesn't treat -s and Jython objects specially, however.Object wrapper that uses SimpleXXX wrappers only. It behaves like the , but for objects that it does not know how to wrap as a SimpleXXX it throws an exception. It makes no use of reflection-based exposure of anything, which may makes it a good candidate for security-restricted applications.所以错误的修改就本简单了:Map<String,List<News>> map=new HashMap<String, List<News>>();map.put("newslist",newslist);cfg = new Configuration();cfg.setServletContextForTemplateLoading(this.getServletContext(),"/ftl");Template template = cfg.getTemplate("newsList.ftl");try {template.process(map,response.getWriter(),ObjectWrapper.BEANS_WRAPPER);} catch (TemplateException e) {e.printStackTrace();}以下是改正后的运⾏效果:以下是今天的主要新闻编号标题发布时间操作1MH-17航班⼜在乌克兰和俄罗斯边境出事了2014-07-15 22:19:45.02中国和巴西签订了很多外贸上的关系⽂件2014-07-17 21:23:45.03全国⼤学⽣软件⼤赛初赛成绩公布了,三⼈组合团队表现很出⾊2014-07-14 15:18:22.04⼭东交通学院将来要成为⼀所名副其实的⼤学真的很困难2012-06-11 13:18:49.0呵呵,⾃⼰的⼀点总结,⼤⼿们不要见笑。

FreeMarker的基础语法使用心得和技巧

FreeMarker的基础语法使用心得和技巧
集合相关常用的内建函数: 1. size:获得集合中元素的个数;
数字值相关常用的内建函数: 1. int:取得数字的整数部分。
举例:
root.put("htm2", "<b>粗体</b>"); 内建函数: ${htm2?html}
十、空值处理运算符 FreeMarker的变量必须赋值,否则就会抛出异常。而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解 null值。 FreeMarker提供两个运算符来避免空值: 1. !:指定缺失变量的默认值; 2. ??:判断变量是否存在。 !运算符有两种用法:variable!或variable!defaultValue。第一种用法不给变量指定默认值,表明默认值是空字符串、长度为0的集合、或长度 为0的Map对象。 使用!运算符指定默认值并不要求默认值的类型和变量类型相同。
//显示生成的数据,//将合并后的数据打印到控制台 Writer out = new OutputStreamWriter(System.out); t1.process(root, out); out.flush();
//显示生成的数据,//将合并后的数据直接返回成字符串! // StringWriter out = new StringWriter(); // t1.process(root, out); // out.flush(); // String temp = out.toString(); // System.out.println(temp); } } 6. 编译和运行Test1.java文件,控制台打印:
6. 时间对象 root.put("date1", new Date()); ${date1?string("yyyy-MM-dd HH:mm:ss")}

struts2源代码分析(个人觉得非常经典)

struts2源代码分析(个人觉得非常经典)

本章讲述Struts2的工作原理。

读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。

实际上Struts1.x与Struts2并无我们想象的血缘关系。

虽然Struts2的开发小组极力保留S truts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。

Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在We bWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。

本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问/xwork/download.action即可自行下载。

下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到struts-2.1.0-src"struts-2.0.10"src"core"src"main"java目录下查看Struts2的源文件,如图14所示。

(图14)主要的包和类Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。

从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。

但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。

freemarker 循环语法

freemarker 循环语法

freemarker 循环语法Freemarker是一种开源Java模板引擎,用于生成动态的文本输出。

它提供了许多的语法规则,其中包括了循环语法。

Freemarker循环语法可以让我们通过循环重复执行同一个操作,减少代码量和提高代码的可读性。

一、Freemarker循环语法的基础在Freemarker中,循环语法有两种形式,即for循环和list循环。

1. for循环for循环是Freemarker中最常用的一种循环语法,它可以根据指定的循环次数来进行重复操作。

语法结构:``` <#list start..end as name> ...操作代码... </#list> ```其中,start是一个整数,表示循环起始值,end是一个整数,表示循环终止值,name是任意命名的循环变量,可以在循环中使用,操作代码是具体的操作语句。

示例:``` <#list 1..5 as i> ${i}, </#list> ```输出结果:``` 1,2,3,4,5, ```2. list循环list循环是一种迭代循环,它可以对列表中的元素进行循环操作。

语法结构:``` <#list list as name> ...操作代码...</#list> ```其中,list是要循环遍历的列表,可以是数组、List集合等,name是任意命名的循环变量,可以在循环中使用,操作代码是具体的操作语句。

示例:``` <#list ["apple","banana","pear"] as fruit> ${fruit} </#list> ```输出结果:``` apple banana pear ```二、Freemarker循环语法的高级用法1. range函数range函数可以根据起始值和步长生成一个连续的整数序列,作为循环的计数器。

struts2标签详解

struts2标签详解

Struts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。

由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。

aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。

如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。

action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。

默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。

下面是本示例应用中的Action类,包含连个处理逻辑。

代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档