Struts2开发知识点

**struts2 之 action**

 


 

开发中实现action的方法,一般只用这种方法:

public class LoginAction extends ActionSupport { public String execute() { } } 

 


 

struts2页面中一般都是用绝对路径

在页面中添加如下代码

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

然后在写路径是使用这样的格式

或者

在head标签中添加base标签   这样在所有路径中会自动将basePath加到路径前面

 


 

动态调用acton方法,常用  !符号

例如连接中这样写...../ userAction!execute

 

通配符调用action   *可以是任何字符

 

 //{1}表示第一个*的字符添加到这里

            /Student{1}_success.jsp

 

 

!!使用通配符 可是使配置文件比较简单

例如:

 

            /{1}_{2}_success.jsp

 

 

 

 

约定优于配置

类名,方法,result页面名称,约定好的话,struts配置文件会很简单!

 

 


 

action中接收页面传递的参数的方式:

1>在action中 设置同名的属性,并添加set get方法,struts会自动接收并赋值,以setXXX(), getXXXX() 方法中XXXX的名称为准.

2>使用domain model 域模型    在问题域中实际存在的模型

 

public class UserAction extends ActionSupport { private User user; //private UserDTO userDTO; public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } 

在jsp页面中

 

 

user.name=a&user.age=8">

 

当页面传递的参数与域模型,实体模型的属性不一一对应时,应当使用vo/do/dto模型接收页面传递的参数,处理之后根据这些模型生成实体类对象.

 

这里的vo/do/dto 只起到了数据传递的作用

 

3>模型驱动方式 ModelDriven   action类implement ModelDriven

action类中实现 public getModel()方法 { return user//这个名与action中的model类对象名相同}

源代码:

public class UserAction extends ActionSupport implements ModelDriven{ private User user = new User(); public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } @Override public User getModel() { return user; } }  

 


 

**struts 传递参数是中文乱码问题的解决

 

    

    

    

        

            /user_add_success.jsp

        

 

        

            /user_add_success.jsp

        

    

 

 


 

简单数据校验

 

public String add() {

if(name == null || !name.equals("admin")) {

this.addFieldError("name", "name is error");

this.addFieldError("name", "name is too long");

return ERROR;

return SUCCESS;

}

 

 

错误页面:

 

User Add Error!


 

 


 

 

在action中得到访问web元素的request,session,application对象最常用的方式

public class LoginAction3 extends ActionSupport { private HttpServletRequest request; private HttpSession session; private ServletContext application; public LoginAction3() { request = ServletActionContext.getRequest(); session = request.getSession(); application = session.getServletContext(); } public String execute() { request.setAttribute("r1", "r1"); session.setAttribute("s1", "s1"); application.setAttribute("a1", "a1"); return SUCCESS; } }  

 


 

默认的action

 

 

    

 

    

    

    

     /default.jsp

    

    

 

 

 


 

##Action总结##

1.实现action的最常用方式:从ActionSupport继承

2.DMI动态方法调用

3.通配符配置*_*      {1}_{2}

4.接收参数的方法(!!一般使用action属性或者DomainModel来接收)

5.简单参数验证 addFieldErrro()方法

**一般不使用Struts2的UI标签,无法灵活处理错误信息

6.访问wed元素

7.包含文件配置 xml中  included 属性

8。默认action处理 struts.xml

*

即当无法找到对应的action时,执行actinName1这个action


 

**Struts2 之 Result**


Result的种类及使用:

 

 

 

   

    /r1.jsp//默认选项,为服务器端跳转,只能跳到html,jsp页面,不能跳到action

   

 

   

    /r2.jsp//客户端跳转,只能跳到视图,不能action

   

 

   

    r1//访问action,注意前面最好不要加/,属于服务器端跳转

   

 

   

    r2//客户端直接跳转到action

   

 

    

前两个最常用!!

 

 

 


 

一包中的struts配置可以从另外一个包中继承,访问别的包的result

 

 

    

    

 

 

    

     /main.jsp

    

 

    

     /index.jsp

    

 

   

    /user_success.jsp

    /user_error.jsp

       

    

 

    

    

     /admin.jsp

    

    

 

 

 


 

 所有action都可以用的result   例如错误页面跳转

 

 

 

    

     /main.jsp

    

 

    

     /index.jsp

    

 

   

    /user_success.jsp

    /user_error.jsp

       

    

 


 

带有参数的Result

struts.xml

 

    

    

 

   

    /user_success.jsp?t=${type}

       

    

 

action class
public class UserAction extends ActionSupport {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
return "success";
}
}

***一次请求,在服务器端跳转action时,各action共享页面传递来的的参数
***当在客户端跳转,2次请求时,如果希望得到前一次请求中action中的参数,需要在result中添加参数${参数名}例如:/user_success.jsp? t=${type}
注意:此时,由于传递的参数是给一个jsp页面而不是action,所有没有valueStack,访问该参数不能像访问action给jsp页面传递的参数那样从valuestack中访问,需从parameters中访问,
或者&& <%=request.getParameters("t")%>应该也可以!

##Result总结:##

Result种类:

1.默认为dispatcher 

2.redirect

以上两种常用

3.chain

4.redirectAction

 

全局结果集:

global-results  |  extends

多个action共享一个result时,使用global-results ,当希望共享其他package里的global-results时,使用extends继承那个包

 

 

动态结果集,了解即可

在action设置一个属性,保存具体的result的值location,跳转的路径.然后在配置文件中使用${将该属性得到}

 

传递参数

a)客户端传递才需要

b)${}表达式不是el,${}从valuestack中取值

 

 

 

 


 

**Struts2 之 OGNL表达式**

OGNL表达式语言学习

  1. 访问值栈中的action的普通属性: username =
  2. 访问值栈中对象的普通属性(get set方法): | | | wrong: <%----%>
  3. 访问值栈中对象的普通属性(get set方法):
  4. 访问值栈中对象的普通方法:
  5. 访问值栈中对象的普通方法:
  6. 访问值栈中action的普通方法:

  7. 访问静态方法:
  8. 访问静态属性:
  9. 访问Math类的静态方法:

  10. 访问普通类的构造方法:

  11. 访问List:
  12. 访问List中某个元素:
  13. 访问List中元素某个属性的集合:
  14. 访问List中元素某个属性的集合中的特定值: |
  15. 访问Set:
  16. 访问Set中某个元素:
  17. 访问Map:
  18. 访问Map中某个元素: | |
  19. 访问Map中所有的key:
  20. 访问Map中所有的value:
  21. 访问容器的大小: |

  22. 投影(过滤):
  23. 投影:
  24. 投影:
  25. 投影:

  26. []:
 

 

 

**Struts2 之 struts标签**

 

Struts-Tags学习

  1. property:
  2. property 取值为字符串:
  3. property 设定默认值:
  4. property 设定HTML:

  5. set 设定adminName值(默认为request 和 ActionContext):
  6. set 从request取值:
  7. set 从ActionContext取值:
  8. <%--
  9. set 设定范围:
  10. set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %>
  11. --%>
  12. set 设定var,范围为ActionContext:
  13. set 使用#取值:
  14. set 从相应范围取值:

  15. <%--
  16. push:
  17. push:
  18. push:
  19. --%>
  20. bean 定义bean,并使用param来设定新的属性值:
  21. bean 查看debug情况: 拿出值:

  22. include _include1.html 包含静态英文文件
  23. include _include2.html 包含静态中文文件
  24. include _include1.html 包含静态英文文件,说明%用法

  25. if elseif else: age =
    wrong age! too young! yeah!
    null

  26. 遍历集合:
    |
  27. 自定义变量:
    |
  28. 使用status:
    | 遍历过的元素总数: | 遍历过的元素索引: | 当前是偶数?: | 当前是奇数?: | 是第一个元素吗?: | 是最后一个元素吗?:
  29. |
  30. |
 

1.通用标签:

a>property

b>set

i.默认为action scope,会将值放入 request 和 ActionContext中

ii.page,request,session,application

c>bean

d>include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)

e>param

f>debug

2.控制标签

a>if elseif else

b>iterator

i.collections map enumeration iterator array

c>subset

3.UI标签

a>theme

i.simple xhtml(默认)  css xhtml ajax

4.AJAX标签

a>补充

5.$#%的区别

a>$用于i18n 和 struts配置文件

b>#取得ActionContext的值

c>%将原来的文本属性解析为ognl,对于本来就是ognl的属性不起作用

i.参考

 


 

 

 

你可能感兴趣的:(java开发知识点)