通用标签是用于控制执行流,当页面呈现。这些标签也允许数据提取的地方比你的行动或其他价值堆栈,如本地化,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改变到其他路径。
<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
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"%> <!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的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"%> <!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>
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; } }
<?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>
仅为测试
<%@ 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注解配置之@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; } }