日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/11/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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>

?

轉載于:https://www.cnblogs.com/printN/p/6502038.html

總結

以上是生活随笔為你收集整理的Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。