通用标签是用于控制执行流,当页面呈现。这些标签也允许数据提取的地方比你的行动或其他价值堆栈,如本地化,javabean,包括额外的url或其他的action。
控制标签提供控制流,例如,if,和迭代器。
数据标签允许数据操作或创建,bean,push,i18n。
这里有各个标签使用的详细案例非常好,所有的测试类及界面写额的较为详细
http://www.roseindia.net/struts/struts/struts2.2.1/tags/index.html
与通用的标记、UI标记不提供控制结构或逻辑。相反,他们关注使用数据,从你的行动/值栈或从数据标签,在丰富的可重用的HTML和显示数据。所有UI标记是由模板和主题。虽然通用标签仅仅输出一些内容直接从标记(如果有任何内容输出),UI标记听从一个模板,通常组合在一起作为一个主题,做实际的呈现。
模板支持允许HTML UI标记构建一组丰富的可重用的组件,可以定制,以适应具体的要求。,主题和模板。
此页面也有详细介绍大家可以参考
http://www.roseindia.net/struts/struts/struts2.2.1/tags/index.html
1.零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定来调度页面的跳转而使得配置大大减少。
2.约定优于配置
3.安装Convention插件,复制struts2-convention-plugin-2.3.16.jar
1. 默认所有的结果页面都存储在WEB-INF/content下,可以通过设置struts.convention.result.path改变到其他路径。
2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有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部分。然后将将每个分部的首字母转为小写,用’-’分割
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
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;
}
}
仅为测试用
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
My JSP'hello-worldp.jsp' starting page
${message }
访问 : http://localhost:8080/convention/hello-world
第一个Action返回的逻辑视图字符串没有对应的视图
第二个Action与第一个Action处于同一个包下
第二个Action的URL为:firstActionName+resultcode
http://localhost:8080/convention/first
package action;
import com.opensymphony.xwork2.ActionSupport;
public classFirst extendsActionSupport {
/**
*
*/
private static final long serialVersionUID= 1L;
@Override
public String execute() throws Exception {
return "second";
}
}
package action;
import com.opensymphony.xwork2.ActionSupport;
public classFirstSecond extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
My JSP'first-second-success.jsp' starting page
来了 This is my JSP page.
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;
}
}
仅为测试
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
My JSP 'hello.jsp' starting page
This is my hello.JSP page.
在Struts2注解配置之@Action(二)中对于结果页面我还是采用Convention Plugin的约定,但是这一节我需要利用@Results和@Result改变一下这种约定。以及@Results和@Result对类和方法进行注解后所产生的效果。
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;
}
}