随笔 - 37  文章 - 14  trackbacks - 0
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用链接

留言簿

随笔分类

随笔档案

文章分类

相关链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

书名:<< Struts2 权威指南--基于WebWork核心的MVC开发 >>

一、对Struts2的认识:
1、Action类可以是一个包含execute方法的POJO类,struts框架提供了一个Action接口及一个ActionSupport工具类,用户可以根据自己的需求实现或者继承来实现自己的Action类。进而实现用户Action类与HttpServlet API的脱离,有利于测试。
2、线程安全:Struts2 Action对象为每个请求产生一个实例
3、丢弃Struts1存在的ActionForm,Struts2直接使用Action属性来封装用户请求属性,也可以封装响应值。Action所有的属性都是被封装到ValueStack对象中,Action属性名可以理解为ValueStack中的value的名字。在输出端可以通过ValueStack的findValue()方法查看某个表达式的值
4、OGNL
5、数据验证:Action类继承ActionSupport,并重写validate()方法;或者通过只继承ActionSupport,但使用XWork校验框架进行校验
6、配置文件struts.xml 、struts.properties

二、实例
1、在web.xml配置struts2 的核心Filter配置
    <filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    
</filter>

    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
2、实现用户Action并继承ActionSupport
public class LoginAction extends ActionSupport {
    
    
private String username;
    
private String password;
    
private String[] books;
    
public String getPassword() {
        
return password;
    }
    
public void setPassword(String password) {
        
this.password = password;
    }
    
public String getUsername() {
        
return username;
    }
    
public void setUsername(String username) {
        
this.username = username;
    }
    
    
    
    
    
public String[] getBooks() {
        
return books;
    }
    
public void setBooks(String[] books) {
        
this.books = books;
    }
    
public String execute() throws Exception{
        
if(getUsername().equals("2b")){
            ActionContext.getContext().getSession().put(
"user",getUsername());
            BookService bs 
= new BookService();
            setBooks(bs.getBooks());
            
return "success";
        }
else{
            
return "error";
        }
    }
    
    
public void validate(){
        
/*        if(getUsername() == null || getUsername().trim().equals("")){
            addFieldError("username",getText("user.required"));
        }
*/
    }
    
}
2.1、跟踪用户状态:struts2提供了一个ActionContext类,该类提供了一个getSession的方法,但该方法的返回值类型并不是HttpSession,而是Map ;Struts2的拦截器会负责该Session与HttpSession之间的转换。把用户名存储在map中,在输出页面通过HttpSession的取得user的值
ActionContext.getContext().getSession().put("user",getUsername());

2.2、Action属性都被封装到ValueStack对象中,页面输出信息
        welcome ${sessionScope.user}
        
        
        
<table border="1">
            
<tr><td>JSP标签显示</td></tr>
            
<%
                ValueStack vs 
= (ValueStack)request.getAttribute("struts.valueStack");
                
String[] books = (String[])vs.findValue("books");
                
for(String book : books){
             
%>
            
<tr><td><%=book %></td></tr>
            
<%
                }
             
%>
             
        
</table>        
        
        
        
<table border="1">
        
<tr><td colspan="2">struts 标签显示</td></tr>
        
<s:iterator value="books" status="index">
            
<s:if test="#index.odd==true">
                
<tr style="background-color:#ccc">
            
</s:if>
            
<s:else>
                
<tr>
            
</s:else>
                
<td>书名:</td>
                
<td><s:property/></td>
        
</s:iterator>        
        
</table>
2.3、数据校验:
A:重写validate方法,并把提示信息通过addFieldError("username",getText("user.required")添加到ActionSupport的fieldErrors域中,然后通过OGNL表达式输出。(注:<s:form>具备输出校验错误的能力)
B:XWork框架校验,Action类继承ActionSupport类,但不需要重写validate方法。在Action类同一路径下,增加校验规则文件,文件的命名格式为"ActionName-validation.xml",填写具体验证规则


posted on 2008-02-22 14:08 扭曲的铅笔 阅读(598) 评论(1)  编辑  收藏 所属分类: J2EE

FeedBack:
# re: Struts2学习一 2008-10-24 22:45 路过
能不能给个做过的例子或小项目学习下
谢谢
邮箱 renjin_job@sina.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: