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


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;
	}

	@Override
	public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值