Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

struts2中的Action接收表单传递过来的参数有3种方法:

如,登陆表单login.jsp:

1 <form action="login" method="post"name="form1">
2
3
4   用户名:<s:textfieldname="username"/><br/>
5    密 码:<s:passwordname="password"/><br/>
6               <s:submit value="提交"/>
7  </form>

1.在Action类中定义表单属性,两者属性名称必须一致。提供setter,getter方法。即可接收到表单传过来的参数.

这种接收参数的方法,方便简单,但是结构性不是很好,且当表单传递来的参数很多的时候,整个Action类中充斥着setter,getter方法,程序结构不是很美观。

2.把表单传递过来的参数封装成一个类,然后调用其中的属性.

如,把login.jsp页面要传来的参数进行封装(例如:封装于Users 类)

 1 private String username;
 2 private String password;
 3
 4 public String getUsername() {
 5   return username;
 6 }
 7 public void setUsername(String username) {
 8   this.username = username;
 9 }
10 public String getPassword() {
11   return password;
12 }
13 public void setPassword(String password) {
14   this.password = password;
15 }

然后再Action方法中,定义该类的对象就可以了,如

 1 public class loginAction extends ActionSupport{
 2
 3 private Users users;
 4
 5 public Users getUsers(){
 6
 7 return users;
 8
 9 }
10
11 public void setUsers(Users users){
12
13 this.users=users;
14
15 }
16
17 }

通过这种方法传值,还必须在jsp页面做一下处理,login.jsp中from1的属性名应该改成这样:

登陆表单login.jsp:

<form action="login" method="post"name="form1">
  用户名:<s:textfieldname="users.username"/><br/>
  密 码:<s:passwordname="users.password"/><br/>
              <s:submit value="提交"/>
 </form>

这种方法,在struts开发中是很常用的一种方法!

3.通过实现ModelDriven接口接收表单数据

首先Action类必须实现ModelDriven接口,同样把表单传来的数据封装起来,Action类中必须实例化该对象,并且要重写getModel()方法

public class loginAction extends ActionSupport implementsModelDriven<Users>{

private Users users =new Users();

public Users getModel(){

return users;

}

}

4.valueStack的使用

 

 1 <table border="1" width="360">
 2    <caption>
 3     作者李刚的图书
 4    </caption>
 5    <!-- 迭代输出ValueStack中的books对象,其中status是迭代的序号 -->
 6    <s:iterator value="books" status="index">
 7     <s:if test="#index.odd == true">
 8      <tr style="
 9     </s:if>
10     <s:else>
11      <tr>
12     </s:else>
13     <td>
14      书名:
15     </td>
16     <td>
17      <s:property />
18     </td>
19     </tr>
20    </s:iterator>
21   </table>

Struts2将所有属性值封装在struts.valueStack请求属性里,可以通过request.getAttribute("struts.valueStack")获取。Action所有的属性都被封装到了ValueStack对象中,它类似于map,Action中的属性名可以理解为ValueStack中value的名字。可以通过valueStack.findValue("name")来取值。

BookService.Java

public class BookService
{
 // 模拟数据库
 private String[] books =
  new String[] {
   "疯狂Java讲义" ,
   "轻量级Java EE企业应用实战",
   "疯狂Ajax讲义",
   "疯狂XML讲义",
   "Struts 2权威指南"
  };

 public String[] getLeeBooks()
 {
  return books;
 }

}

GetBooksAction.java

 1 import com.opensymphony.xwork2.Action;
 2 import com.opensymphony.xwork2.ActionContext;
 3
 4 public class GetBooksAction implements Action
 5 {
 6  private String[] books;
 7
 8  public void setBooks(String[] books)
 9  {
10   this.books = books;
11  }
12
13  public String[] getBooks()
14  {
15   return books;
16  }
17
18  public String execute() throws Exception
19  {
20   String user = (String)ActionContext.getContext().getSession().get("user");
21   if (user != null && user.equals("crazyit"))
22   {
23    BookService bs = new BookService();
24    setBooks(bs.getLeeBooks());
25    return SUCCESS;
26   }
27   else
28   {
29    return LOGIN;
30   }
31  }
32 }
33
34
35
36
37 showBooks.jsp
38
39 <table border="1" width="360">
40
41 <%
42
43 // 获取封装输出信息的ValueStack对象
44 ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
45
46 // 调用ValueStack的fineValue方法获取Action中的books属性值
47 String[] books = (String[ ])vs.findValue("books");
48
49 //迭代输出全部图书信息
50 for (String book : books){
51 %>
52
53
54 <tr>
55 <td>书名:</td>
56 <td><%=book%></td>
57 </tr>
58 <%}%>
59
60
61 </table>
时间: 2024-08-02 15:11:12

Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用的相关文章

Struts2中&lt;jsp:forward page=&quot;xxx.action&quot;&gt;&lt;/jsp:forward&gt;失效

问题:在Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效了,不但调转不过去还报404错误.不知道是Struts2中不支持还是需要其他的配置. 原因:因为struts2采用过滤器的方式处理请求,默认情况时监控url地址的变化 解决办法1.配置web.xml 解决 [html] view plaincopyprint? <filter-mapping> <filter-name>s

Struts学习笔记(三)struts2中获得request、response和session的三种方法

struts2中获得request.response和session的三种方法   (1)非IoC方式 方法一:使用org.apache.struts2.ActionContext类,通过它的静态方法getContext()获取当前Action的上下文对象. ActionContext ctx = ActionContext.getContext(); ctx.put("liuwei", "andy"); //request.setAttribute("l

Struts2中表单与Action传递数据三种方式

1.       Action中的属性与表单中的属性一致就可以 JSP中的表单 <form action="login.action" method="post"> 用户名:<input type="text" name="username"/>    <br/> 密码:  <input type="password" name="password&quo

监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profile... 一:Log监控 这个属于entity framework自带的一个Action方法,它给大家带来了不错的用户体验,我们可以将其输出放到控制台,又或者写入到记事本中...这

监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profile... 一:Log监控 这个属于entity framework自带的一个Action方法,它给大家带来了不错的用户体验,我们可以将其输出放到控制台,又或者写入到记事本中...这

JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert("ok");}); live(type,[data],fn) 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的 $("a").live("click",function(){alert("ok");}); de

struts2中 jsp:forward 失败原因及解决办法

问题:在Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效了,不但调转不过去还报404错误.不知道是Struts2中不支持还是需要其他的配置. 原因:因为struts2采用过滤器的方式处理请求,默认情况时监控url地址的变化 解决办法1.配置web.xml 解决 1 <filter-mapping> 2 <filter-name>struts2</filter-name&g

Android中WebView的JavaScript代码和本地代码交互的三种方式

一.Android中WebView的漏洞分析 最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 第一.漏洞产生的原因 这个漏洞导致的原因主要是因为Android中WebView中的JS访问本地方法的方式存在缺陷,我们做过交互的都知

EF5(7) 后台使用SelectListItem传值给前台显示Select下拉框;mvc后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式

一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Order控制器,显示订单列表,并且在修改订单的时候,把用户的id 用 select 下拉框显示出来,并且可以提交修改数据   1.1 我们通过比较原始的方法,来把数据 传递到前台后,前台使用  循环来显示 select 并且显示是哪个元素被选中 我们在前台的cshtml中,使用 @model 命令 指定