struts2入门教程六(struts2标签及约定编程)

来源:互联网 发布:网络爬虫开源框架 编辑:程序博客网 时间:2024/04/29 13:21


Struts2标签

通用标签

通用标签是用于控制执行流,当页面呈现。这些标签也允许数据提取的地方比你的行动或其他价值堆栈,如本地化,javabean,包括额外的url或其他的action。

控制标签提供控制流,例如,if,和迭代器。

数据标签允许数据操作或创建,bean,push,i18n

 

  这里有各个标签使用的详细案例非常好,所有的测试类及界面写额的较为详细

http://www.roseindia.net/struts/struts/struts2.2.1/tags/index.html 

UI 标签

与通用的标记、UI标记不提供控制结构或逻辑。相反,他们关注使用数据,从你的行动/值栈或从数据标签,在丰富的可重用的HTML和显示数据。所有UI标记是由模板和主题。虽然通用标签仅仅输出一些内容直接从标记(如果有任何内容输出),UI标记听从一个模板,通常组合在一起作为一个主题,做实际的呈现。
模板支持允许HTML UI标记构建一组丰富的可重用的组件,可以定制,以适应具体的要求。,主题和模板。

 

 

 此页面也有详细介绍大家可以参考

http://www.roseindia.net/struts/struts/struts2.2.1/tags/index.html

 

struts2零配置

1.零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定来调度页面的跳转而使得配置大大减少。

2.约定优于配置

3.安装Convention插件,复制struts2-convention-plugin-2.3.16.jar

 

 

convention-plugin的约定

1. 默认所有的结果页面都存储在WEB-INF/content下,可以通过设置struts.convention.result.path改变到其他路径。

<constantname="struts.convention.result.path" value="/WEB-INF/page"/>

2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。

<constantname="struts.convention.package.locators"value="web,action" />

3. 接着,Convention从前一步找到的package以及其子package中寻找com.opensymphony.xwork2.Action 的实现以及以Action结尾的类:

4. 命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。Com.csdn.net.user.userAction的命名空间是:”/user”。Com.csdn.net.user.detail.UserAction的命名空间是:”/user/detail”

 

5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’-’分割

<constantname="struts.convention.action.name.separator" value="-"/> 

Com.csdn.net.detail.UserDetailAction,映射的url就是/WEB-INF/content/user/detail/user-detail.jsp

6. struts支持.jsp .html .htm .vm格式的文件。

7.返回success  页面为login.jsp /  login-success.jsp / login.html /  login-success.html

 

 

以下案例命名规范示例图



 

     案例一: helloworld

Java 代码必须按照规定命名补不得改动

package action; import com.opensymphony.xwork2.ActionSupport; public classHelloWorld extendsActionSupport {    /**    *    */   private static final long serialVersionUID= 1L;   private String message;    public String getMessage() {      return message;   }    public void setMessage(Stringmessage) {      this.message = message;   }    @Override   public String execute() throws Exception {      message="HEllOwrold";           return SUCCESS;   }  }


 

Jsp页面 hello-world.jsp

 仅为测试用

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"><html><head> <title>My JSP'hello-worldp.jsp' starting page</title> </head> <body>${message }</body></html>

 效果图

访问  :  http://localhost:8080/convention/hello-world


 

案例二Action链的约定

 

第一个Action返回的逻辑视图字符串没有对应的视图

第二个Action与第一个Action处于同一个包下

第二个Action的URL为:firstActionName+resultcode

http://localhost:8080/convention/first

 

java代码—first.java

 

package action; import com.opensymphony.xwork2.ActionSupport; public classFirst extendsActionSupport {    /**    *    */   private static final long serialVersionUID= 1L;    @Override   public String execute() throws Exception {           return "second";   }   }


Java 代码—FirstSecond

package action; import com.opensymphony.xwork2.ActionSupport; public classFirstSecond extends ActionSupport {    @Override   public String execute() throws Exception {           return SUCCESS;   } }


jsp页面--- first-second-success.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"><html><head> <title>My JSP'first-second-success.jsp' starting page</title></head> <body>   来了 This is my JSP page.   <br></body></html>


 

效果图

案例三:Convention插件相关annotation 通过注释

java代码:--HelloAction

package action; importorg.apache.struts2.convention.annotation.Action;importcom.opensymphony.xwork2.ActionSupport; public class HelloAction extendsActionSupport {          /**          *          */         privatestatic final long serialVersionUID = 1L;         privateString message;          publicString getMessage() {                   return message;         }          publicvoid setMessage(String message) {                   this.message= message;         }          @Override         publicString execute() throws Exception {                   message="HEllOwrold";                                     return SUCCESS;         }         @Action("action1")         publicString method1(){                   return SUCCESS;         }                 @Action("/user/action2")         publicString method2(){                   return SUCCESS;         }        }


 

Struts.xml--打开动态调用

<?xml version="1.0"encoding="UTF-8" ?><!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"   "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation"value="true"/> </struts>


jsp页面—hello.jsp

仅为测试

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"><html> <head>     <title>My JSP 'hello.jsp' starting page</title>    </head>   <body>   This is my hello.JSP page. <br> </body></html>


效果图



案例四--- Struts2注解配置之@Results和@Result

Struts2注解配置之@Action(二)中对于结果页面我还是采用Convention Plugin的约定,但是这一节我需要利用@Results@Result改变一下这种约定。以及@Results@Result对类和方法进行注解后所产生的效果。

Java 代码:

 

package action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import com.opensymphony.xwork2.ActionSupport;@Results({ @Result(name = "error", location = "/WEB-INF/error.jsp") })public class HelloAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String execute() throws Exception {message = "HEllOwrold";return SUCCESS;}@Action("action1")public String method1() {return ERROR;}@Action("/user/action2")public String method2() {return SUCCESS;}}

效果图:

 

 

1 0
原创粉丝点击