AAABBB struts2学习笔记之action传值方式(向jsp传值的典型的三种方式)

来源:互联网 发布:linux gzip 解压zip 编辑:程序博客网 时间:2024/06/05 23:03

<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 1.5em; font-size: 12px;">通过包装javaBean传值: <s:property value="user.username"/></span>
<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 1.5em; font-size: 12px;">因为迭代器的定义是只能循环数组,集合或map,所以单个javaBean对象是不能使用迭代器遍历取值的</span>
action层里面,一定要写上set,get list<Javabean> 方法,因为迭代器只输出象数组,list集合,map集合的数组,迭代器的values值一定得是list<Javabean>类型。通过action里面的类视的直接javabean方法: <%=request.getParameter("zss") %>>通过在action里面设置”ServletActionContext.getRequest().getSession().setAttribute("SessionKey", "SessionValue")“方法::<%=request.getSession().getAttribute("SessionKey") %>






如果是jsp向action传值,action类中只需要定义与jsp相对应的name属性值的get set方法即可,然后直接在action里面打印这个name值就能得到结果(前端输入的name结果值)。
JSP页面:写在表单里面,利用隐藏域传值,注意表单提交的地址是下面的这个action<input type="hidden" name="name" value="zss"/>saction里面:  private  String name;     public String getName() {return name;}public void setName(String name) {this.name = name;}System.out.println("jsp传值: "+name);


1、字段驱动方式

所谓字段驱动方式就是通过字段进行数据传递。在Struts2中我们可以直接在Action里定义各种Java基本类型的字段,使这些字段与表单数据相对应,并利用这些字段进行数据传递。

前几篇中提到的struts2例子,用的就是字段驱动方式。

UserAction.java

Java代码  收藏代码
  1. public class UserAction {    
  2.   
  3.     private String username;    
  4.   
  5.     private String password;    
  6.   
  7.     public String getUsername() {    
  8.         return username;    
  9.     }    
  10.   
  11.     public void setUsername(String username) {    
  12.         this.username = username;    
  13.     }   
  14.     public String getPassword() {    
  15.         return password;    
  16.     }    
  17.     public void setPassword(String password) {    
  18.         this.password = password;    
  19.     }    
  20.   
  21.     public String execute() throws Exception {    
  22.   
  23.         System.out.print(username+"--------"+password);    
  24.   
  25.         // 只有用户名为001,密码为123456方可成功登陆    
  26.   
  27.         if (username.equals("001") && password.equals("123456")) {    
  28.             return "success";    
  29.         } else {    
  30.             return "error";    
  31.         }    
  32.     }    
  33. }   
  

这个Action中的定义了两个字符串字段"username”和"password”,这两个字段分别对应登陆页面上的“用户名”和“密码”两个表单域。

 

2、模型驱动方式

所谓模型驱动方式是指通过JavaBean模型进行数据传递。采用这种方式,JavaBean所封装的属性与表单的属性一一对应,JavaBean将成为数据传递的载体。使用模型驱动方式,Action类通过get*()的方法来获取模型,其中“*”代表具体的模型对象。

首先,我们创建一个模型:

Java代码  收藏代码
  1. package com.company.login;  
  2.   
  3. public class User {  
  4.     private String username;  
  5.     private String password;  
  6.       
  7.     public String getUsername() {  
  8.         return username;  
  9.     }  
  10.     public void setUsername(String username) {  
  11.         this.username = username;  
  12.     }  
  13.     public String getPassword() {  
  14.         return password;  
  15.     }  
  16.     public void setPassword(String password) {  
  17.         this.password = password;  
  18.     }  
  19.       
  20.   
  21. }  
  

接下来定义Action类,两个字段已经不再单独定义,而是定义一个User类型的域模型:

Java代码  收藏代码
  1. public class LoginAction extends ActionSupport {    
  2.     private static final long serialVersionUID = 1030294046920869257L;    
  3.     private User user;  
  4.     
  5.     public User getUser() {  
  6.         return user;  
  7.     }  
  8.   
  9.     public void setUser(User user) {  
  10.         this.user = user;  
  11.     }  
  12.   
  13.     // 处理用户请求的execute方法      
  14.       public String execute() throws Exception {    
  15.           if (isInvalid(user.getUsername()))    
  16.               return INPUT;    
  17.           
  18.               if (isInvalid(user.getPassword()))    
  19.                   return INPUT;    
  20.           
  21.                             
  22.               // 只有用户名为001,密码为123456方可成功登陆    
  23.               if (user.getUsername().equals("001") && user.getPassword().equals("123456")) {    
  24.                 // 通过ActionContext对象访问Web应用的Session    
  25.                     ActionContext context  =  ActionContext.getContext();  
  26.                     context.getSession().put("user", user.getUsername());  
  27.                     context.getSession().put("password", user.getPassword());  
  28.                     System.out.println(user.getUsername() + "----" + user.getPassword());    
  29.                     return "success";    
  30.                 } else {    
  31.                     return "error";    
  32.                 }    
  33.   
  34.       }   

  

在使用模型驱动传值的时候需要注意,如果JSP页面是负责取值的,那么取值的格式必须为“模型对象名.属性名”;如果JSP页面是负责传值的,那么传值的格式可以为“模型对象名.属性名”,也可以直接是“属性名”。

接下来对登陆页和成功页进行改动:

login.jsp:

Html代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <%  
  4.     String path = request.getContextPath();  
  5.     String basePath = request.getScheme() + "://"  
  6.     + request.getServerName() + ":" + request.getServerPort()  
  7.             + path + "/";  
  8. %>  
  9.   
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  11. <html>  
  12.     <head>  
  13.         <base href="<%=basePath%>">  
  14.   
  15.         <title><s:text name="login.jsp" />  
  16.         </title>  
  17.     </head>  
  18.     <body>  
  19.         <s:form action="loginAction" namespace="/login">  
  20.                 <s:textfield name="user.username" label="账户" ></s:textfield>    
  21.                 <s:password name="user.password"  label="密码"  ></s:password>    
  22.                 <s:submit value="登录"/>    
  23.         <table>              
  24.         </s:form>  
  25.     </body>  
  26. </html>  
 
 

success.jsp:

 
Html代码  收藏代码
  1. <%@ taglib prefix="s" uri="/struts-tags" %>    
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">    
  4.   
  5. <html>    
  6.   
  7.   <head>    
  8.   
  9.     <title>成功页面</title>    
  10.   
  11.   </head>    
  12.   
  13.        
  14.   
  15.   <body>    
  16.   
  17.     <p align="center">登陆成功!!!您的用户名是<s:property value="user.username"></s:property></p>    
  18.   
  19.   </body>    
  注意jsp页面 用迭代器的方式也可以这样写
<span style="font-size: 14px;"><br/>数据库升级信息记录:<br/></span><span style="font-size:24px;color:#ff0000;">  <strong> <struts:iterator id="u" value="update">   Code:<struts:property value='#u.getCode()'/>  <br/></strong></span><span style="font-size: 14px;"> Version:<struts:property value='#u.getVersion()'/> <br/> Url:<struts:property value='#u.getUrl()'/> <br/> Dialect:<struts:property value='#u.getDialect()'/> <br/> ProName:<struts:property value='#u.getProName()'/> <br/> Driver:<struts:property value='#u.getDriver()'/> <br/>   </struts:iterator> </span>
也可以这样写:
<s:iteratorid="task"value="#request.tasks">       <trclass="table_header">        <td><s:propertyvalue="#task.tname"/></td>        <td><s:propertyvalue="#task.tuid"/></td>        <td><s:propertyvalue="#task.tstartTime"/></td>        <td><s:propertyvalue="#task.tendTime"/></td>        <td><s:propertyvalue="#task.tstate"/></td>



0 0
原创粉丝点击